TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:09 +02:00
commit af8cc155b5
6818 changed files with 642608 additions and 0 deletions
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-66861:
==================================================================================
Breaking: #66861 - Do not automatically append a "/" to the identifier of a folder
==================================================================================
See :issue:`66861`
Description
===========
The `Folder` object automatically appended a `/` to the identifier. But as the `Folder` object should not
manipulate the folder identifier this is removed.
Impact
======
Installations with custom FAL driver(s) could break.
Affected Installations
======================
Installations with a custom FAL driver that relies on the `/` being added by the Folder object.
Migration
=========
All drivers that depend on this `/` being added should be adjusted so the driver handles this.
.. index:: PHP-API, FAL
@@ -0,0 +1,90 @@
.. include:: /Includes.rst.txt
.. _breaking-70056:
=====================================================================
Breaking: #70056 - Http-related options and HttpRequest class removed
=====================================================================
See :issue:`70056`
Description
===========
The following PHP classes have been removed:
* :php:`TYPO3\CMS\Core\Http\HttpRequest`
* :php:`TYPO3\CMS\Core\Http\Observer\Download`
The following configuration options have been removed:
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlUse]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlProxyNTLM]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlProxyServer]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlProxyTunnel]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlProxyUserPass]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][SYS][curlTimeout]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][adapter]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][protocol_version]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][follow_redirects]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][max_redirects]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][strict_redirects]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_host]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_port]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_user]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_password]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_auth_scheme]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_verify_peer]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_verify_host]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_cafile]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_capath]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_local_cert]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_passphrase]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][userAgent]`
The following properties have been renamed:
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][userAgent]` is now called :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][headers][User-Agent]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][protocol_version]` is now called :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][version]`
* All proxy-related options are unified within :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy]`
* All redirect-related options (HTTP/follow_redirects, HTTP/max_redirects, HTTP/strict_redirects) are unified within :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][allow_redirects]`
* All options related to SSL private keys (HTTP/ssl_local_cert, HTTP/ssl_passphrase) are merged into :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_key]`
* All options related to verify SSL peers are merged into :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][verify]`
Additionally, the dependency to the PEAR Package "Http_Request2" (composer package name `pear/http_request2`) has
been removed in favor of the PHP library Guzzle.
Impact
======
Calling the mentioned classes above will result in a fatal PHP error.
Using the options in custom PHP code will result in unexpected behavior as the options are non-existent and empty.
Using PHP code that depends on the removed PEAR library "Http_Request2" will result in unexpected behaviour and possibly a
fatal PHP error.
Affected Installations
======================
All 3rd party extensions calling the mentioned classes directly or using the configuration options directly, as well
as installations depending on the PEAR library "Http_Request2".
Migration
=========
For PHP code previously using the `HttpRequest` and `Download` classes a new object-oriented PSR-7-based approach is
introduced, see the Guzzle Feature integration documentation for more details. A new PHP class
`TYPO3\CMS\Core\Http\RequestFactory` which generates PSR-7 compliant request objects helps in simplifying the
migration process.
All still necessary options will be migrated to new options within :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP]` when the install tool is run.
In special cases, the options :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][ssl_verify_host]`, :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_auth_scheme]`
and :php:`$GLOBALS[TYPO3_CONF_VARS][HTTP][proxy_host]` need to migrated manually to the newly available options.
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _breaking-72931-1668719172:
=================================================================================
Breaking: #72931 - SearchFormController::pi_list_browseresults() has been renamed
=================================================================================
See :issue:`72931`
Description
===========
In order to make Indexed Search pi-based plugin PHP7 compatible, the `SearchFormController::pi_list_browseresults()`
method has been renamed to `SearchFormController::renderPagination()`.
Parameter types, order and count have been preserved. However the methods visibility has been changed to protected.
Impact
======
Call to old method name will result in fatal error "Call to undefined method".
Affected Installations
======================
Any installation of TYPO3 7.6 or TYPO3 8 where `SearchFormController` is overloaded (XCLASSed) and the new class contains
a call to the old method name and any code that called the public method from outside the class.
Migration
=========
Rename :php:`pi_list_browseresults()` to :php:`renderPagination()`.
Calling the method from outside the class is no longer possible.
.. index:: PHP-API, Frontend, ext:indexed_search
@@ -0,0 +1,35 @@
.. include:: /Includes.rst.txt
.. _breaking-75237:
=======================================================================
Breaking: #75237 - Removal of div ce-bodytext might cause layout issues
=======================================================================
See :issue:`75237`
Description
===========
If neither bodytext nor header were entered in the TextMedia element, the div element containing the class `ce-bodytext` will be suppressed.
Impact
======
The missing div could cause layout problems, if the layout and CSS depend on it.
Affected Installations
======================
All installations relying on :html:`<div class="ce-bodytext">`
Migration
=========
Either change the CSS or use a custom template without all the conditions.
.. index:: Fluid, ext:fluid_styled_content
@@ -0,0 +1,42 @@
.. include:: /Includes.rst.txt
.. _breaking-75323:
==========================================================================
Breaking: #75323 - Removed parameter entryPointPath from main applications
==========================================================================
See :issue:`75323`
Description
===========
The entry point `PHP` classes for :file:`index.php`, :file:`typo3/index.php` and so forth (called "Application classes")
now have a parameter not to define the path to the entry point but the number of subdirectories under the main
installation path, allowing to not specify the name of the path, but just the levels of subdirectories.
Subsequently, the methods `Bootstrap->baseSetup()`, `Bootstrap->redirectToInstallTool()` and
`SystemEnvironmentBuilder::run()` now expect an integer as parameter, instead of the path to the entry point script.
Impact
======
Calling one of the methods above with a string as parameter instead of an integer will fail because the calculation for PATH_site
which is the base for the whole installation will fail.
Affected Installations
======================
Any installation with custom entry points or custom extensions with separate entry points.
Migration
=========
Use the entry point level as integer, instead of the string, in your custom entry points. See
:php:`TYPO3\CMS\Backend\Http\Application` for an example.
.. index:: PHP-API, Backend
@@ -0,0 +1,56 @@
.. include:: /Includes.rst.txt
.. _breaking-75324:
=====================================================
Breaking: #75324 - ReferenceIndex CLI command changed
=====================================================
See :issue:`75324`
Description
===========
The Reference Index Updater Command Line command has been changed to use a Symfony Command.
The command to update the reference index on non-composer-mode installations is now called on the command line via
`typo3/sysext/core/bin/typo3 referenceindex:update`.
To just check the reference index, the option `-c` (alternatively the property "check" can be used) is used like this `typo3/sysext/core/bin/typo3 referenceindex:update -c`
For installations set up via composer, the typo3 CLI binary is available in the "bin/" directory directly inside the
project root.
The command can be used like this:
.. code-block:: sh
# update the reference index
bin/typo3 referenceindex:update
# check the reference index
bin/typo3 referenceindex:update -c
bin/typo3 referenceindex:update --check
The additional option --silent does not output anything when running the CLI command.
Impact
======
Calling the command via the old syntax `typo3/cli_dispatch.phpsh lowlevel refindex` will not work anymore.
Affected Installations
======================
Any existing installation upgrading to TYPO3 v8 with a (e.g. cron) CLI script, running the reference index update via
the :file:`typo3/cli_dispatch.phpsh`.
Migration
=========
Change the CLI scripts inside your installation to the new binary path.
.. index:: PHP-API, CLI, ext:lowlevel
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-75349:
========================================================================
Breaking: #75349 - Move Indexed Search pi-based plugin to compatibility7
========================================================================
See :issue:`75349`
Description
===========
Indexed Search pi1 plugin (based on AbstractPlugin) has been moved to EXT:compatibility7 and will not be developed further. EXT:compatibility7 will be moved to TER before the release of 8 LTS.
The Extbase plugin (pi2) stays in Indexed Search as before.
Impact
======
Installation of EXT:compatibility7 is required to continue using the pi1 plugin. In the longer run migrating to the Extbase plugin is required.
Affected Installations
======================
All installations using the pi-based indexed search plugin.
Migration
=========
Installations using pi1 should migrate to the Extbase plugin or install EXT:compatibility7.
.. index:: PHP-API, ext:indexed_search
@@ -0,0 +1,41 @@
.. include:: /Includes.rst.txt
.. _breaking-75355:
===================================================
Breaking: #75355 - FlexForm-related options removed
===================================================
See :issue:`75355`
Description
===========
The following options regarding FlexForm handling have been removed.
* :php:`$GLOBALS[TYPO3_CONF_VARS][BE][niceFlexFormXMLtags]`
* :php:`$GLOBALS[TYPO3_CONF_VARS][BE][compactFlexFormXML]`
Storing FlexForms in the database via the TYPO3 Core API does not compact the XML files anymore (it now always
uses 4 spaces for indentation inside the XML) and also always uses meaningful tags so it can be validated with DTDs.
Impact
======
Having the options set will result in new/updated FlexForm data being written
with spaces instead of tabs and with meaningful tags while keeping full backwards compatibility when reading.
This was the default for new installations already, but introduced due to legacy installations (pre 4.0) that dealt with
FlexForms back in 2004.
Affected Installations
======================
Any installation having these properties set in their :file:`LocalConfiguration.php`.
Any extension evaluating these parameters on its own.
.. index:: LocalConfiguration, Backend, FlexForm
@@ -0,0 +1,42 @@
.. include:: /Includes.rst.txt
.. _breaking-75357:
==================================================================
Breaking: #75357 - $TYPO3_CONF_VARS[BE][lockSSL] option is boolean
==================================================================
See :issue:`75357`
Description
===========
The setting :php:`$GLOBALS[TYPO3_CONF_VARS][BE][lockSSL]` which forces requests to the TYPO3 Backend to be transferred
via SSL, has been changed to only allow boolean values.
The settings previously allowed three options:
* `lockSSL` set to `0` - Don't force a SSL connection at all
* `lockSSL` set to `1` - If the incoming request to the TYPO3 backend is a non-SSL request, an exception was thrown
* `lockSSL` set to `2` - If the incoming request is a non-SSL-request, redirect to the SSL-enabled URL
The option `1` has been removed without substitution, allowing the following variants:
* `lockSSL` set to `false` - Don't force a SSL connection at all
* `lockSSL` set to `true` - If the incoming request is a non-SSL-request, redirect to the SSL-enabled URL
Impact
======
If the option was set previously to `1`, the exception is not thrown but a redirect will now happen.
The same behavior as the existing option `2`.
Affected Installations
======================
TYPO3 instances having the option above set to `1`.
.. index:: LocalConfiguration, Backend
@@ -0,0 +1,83 @@
.. include:: /Includes.rst.txt
.. _breaking-75454:
=====================================================================
Breaking: #75454 - LocalConfiguration DB config structure has changed
=====================================================================
See :issue:`75454`
Description
===========
To provide support for multiple database connections and remapping tables to different
database systems within the TYPO3 Core the configuration format for database connections
in :file:`LocalConfiguration.php` / :php:`$GLOBALS['TYPO3_CONF_VARS']['DB']` has changed.
The new configuration array structure:
.. code-block:: php
'DB' => [
'Connections' => [
'Default' => [
'driver' => 'mysqli',
'dbname' => 'typo3_database',
'password' => 'typo3',
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'typo3',
'unix_socket' => '',
'charset' => 'utf-8',
],
],
],
Be aware that besides the deeper nesting below 'Connections/Default' some of the configuration
keys have been renamed. It is required to provide the new configuration key `driver` with a
value of `mysqli` explicitly.
The following table lists the changed configuration keys and the appropriate values if these
have changed.
============================ ===============================================
Old name New name
============================ ===============================================
DB/username DB/Connections/Default/user
DB/password DB/Connections/Default/password
DB/host DB/Connections/Default/host
DB/port DB/Connections/Default/port
DB/socket DB/Connections/Default/unix_socket
DB/database DB/Connections/Default/dbname
SYS/setDBinit DB/Connections/Default/initCommands
SYS/no_pconnect DB/Connections/Default/persistentConnection
SYS/dbClientCompress DB/Connections/Default/driverOptions
Valid values for MySQLi connections:
0 compression disabled
32 compression enabled
============================ ===============================================
Impact
======
Connections to the database will fail with an exception until the configuration has been migrated
to the new structure.
Affected Installations
======================
All Installations
Migration
=========
The Install Tool will migrate the configuration information for the default connection to the new
format. Installations overriding the database configuration using :file:`AdditionalConfiguration.php`
or other means need to ensure the new format is being used.
.. index:: Database, LocalConfiguration
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _breaking-75454-1668719172:
=============================================
Breaking: #75454 - TYPO3_db Constants removed
=============================================
See :issue:`75454`
Description
===========
The PHP constants :php:`TYPO3_db`, :php:`TYPO3_db_username`, :php:`TYPO3_db_password` and :php:`TYPO3_db_host`
which were used when TYPO3 initialized the database connection have been removed.
Impact
======
Checking for or using the mentioned constants may lead to unexpected behavior or errors.
If not checked if the constant even was defined, the application will stop immediately.
Affected Installations
======================
Any installation which uses a third-party extension using these constants.
Migration
=========
Use the configuration data within :php:`$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']`
to determine the username, password and host information for the default database connection.
.. index:: PHP-API, Database, LocalConfiguration
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-75497:
===============================================
Breaking: #75497 - inline backend layout wizard
===============================================
See :issue:`75497`
Description
===========
The `BackendLayoutWizardController` has been removed and a new renderType has been added to render the backend layout wizard inline in FormEngine.
Also the backend route `wizard_backend_layout` has been removed.
Impact
======
Extending or using the `BackendLayoutWizardController` will break installations.
Affected Installations
======================
Any installation which uses an extension which makes use of `BackendLayoutWizardController`
Migration
=========
Use the renderType `belayoutwizard`, which renders the backend layout wizard inline in FormEngine.
.. index:: PHP-API, Backend, TCA
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _breaking-75708:
=======================================================
Breaking: #75708 - Always store <p> tags in DB from RTE
=======================================================
See :issue:`75708`
Description
===========
When transforming HTML data from the Rich Text Editor to the database, the RteHtmlParser removed :html:`<p>` tags from
lines when there were no attributes for the :html:`<p>` tags, otherwise they were kept as :html:`<p>` tags with
their attributes.
The transformation now always keeps :html:`<p>` tags within the content in order to minimize the transformation overhead
between the RTE and the database.
Impact
======
Every time an RTE field is edited, the :html:`<p>` tags are now stored inside the database when saving the content.
Affected Installations
======================
All installations using RTE fields or RteHtmlParser transformations.
Migration
=========
An upgrade wizard inside the Install Tool (coming until 8.1) will make sure that any database RTE field is converted.
.. index:: Database, Backend, RTE
@@ -0,0 +1,43 @@
.. include:: /Includes.rst.txt
.. _breaking-75711:
===============================================================================
Breaking: #75711 - Removed DB-related methods and TCA-related options from cObj
===============================================================================
See :issue:`75711`
Description
===========
The following methods have been removed from `ContentObjectRenderer` without substitution:
* :php:`DBgetDelete()`
* :php:`DBgetUpdate()`
* :php:`DBgetInsert()`
* :php:`DBmayFEUserEdit()`
* :php:`DBmayFEUserEditSelect()`
* :php:`exec_mm_query()`
* :php:`exec_mm_query_uidList()`
The following TCA options have no effect anymore throughout the TYPO3 Core:
* :php:`$GLOBALS['TCA'][table]['ctrl']['fe_cruser_id']`
* :php:`$GLOBALS['TCA'][table]['ctrl']['fe_crgroup_id']`
* :php:`$GLOBALS['TCA'][table]['ctrl']['fe_admin_lock']`
Impact
======
Calling any of the methods above directly will trigger a PHP fatal error.
Affected Installations
======================
Any TYPO3 installation using DB-related Frontend Administration with the obsolete functionality.
.. index:: PHP-API, TCA, Database
@@ -0,0 +1,42 @@
.. include:: /Includes.rst.txt
.. _breaking-75829:
===================================================================
Breaking: #75829 - Removed handling of pre 6.0 files when importing
===================================================================
See :issue:`75829`
Description
===========
The functionality for importing :file:`*.t3d` files created from installations lower than TYPO3 CMS 6.0 has been removed.
The following public method has been removed: :php:`\TYPO3\CMS\Impexp\Import::fixCharsets()`.
Impact
======
Importing files into TYPO3 v8 that were created from a TYPO3 4.x installations will result in unexpected behavior,
especially when dealing with files and relations.
Calling the PHP method above will result in a fatal PHP error.
Affected Installations
======================
Any installation using the t3d import functionality for importing files that were created from a TYPO3 instance older
than TYPO3 6.0.0.
Migration
=========
It is recommended to import files in a 6.x or 7.x installation and export the files from there again to import them
in TYPO3 v8.
.. index:: PHP-API, Backend, ext:impexp
@@ -0,0 +1,54 @@
.. include:: /Includes.rst.txt
.. _deprecation-73209:
===================================================
Deprecation: #73209 - Deprecated flex page TSConfig
===================================================
See :issue:`73209`
Description
===========
Setting page TSConfig values `PAGE_TSCONFIG_ID`, `PAGE_TSCONFIG_IDLIST` and
` PAGE_TSCONFIG_STR` for flexform fields globally has been marked as deprecated, specific
fields must be set now.
Example for a now deprecated global TSConfig value:
`TCEFORM.tt_content.pi_flexform.PAGE_TSCONFIG_ID = 42`
This should now be restricted to specific fields of the flexfrom data structure, if for example
the flexform `foreign_table_where` of field `settings.categories` of a `tt_content` plugin`s
data structure should be set, the new page TSConfig option should look like:
`TCEFORM.tt_content.pi_flexform.theDataStructure.theSheet.settings\.categories.PAGE_TSCONFIG_ID = 42`
Note that any dots within the field name must be escaped with '\\', this is a typical
scenario for extbase.
Impact
======
This pageTSConfig cannot be set for section elements anymore: `PAGE_TSCONFIG_ID`,
`PAGE_TSCONFIG_IDLIST` and `PAGE_TSCONFIG_STR` do not have any effect on repeatable
elements.
Affected Installations
======================
Installations that set `PAGE_TSCONFIG_ID`, `PAGE_TSCONFIG_IDLIST` and `PAGE_TSCONFIG_STR`
for flexform fields globally should be restricted to set those values for single elements.
Migration
=========
Search for `PAGE_TSCONFIG_ID`, `PAGE_TSCONFIG_IDLIST` and `PAGE_TSCONFIG_STR` and restrict
them to single fields as outlined above.
.. index:: PHP-API, TSConfig, FlexForm
@@ -0,0 +1,53 @@
.. include:: /Includes.rst.txt
.. _deprecation-73728:
========================================================
Deprecation: #73728 - Wizard type colorbox is deprecated
========================================================
See :issue:`73728`
Description
===========
The color-picker is now available as dedicated render-type which will integrate
an inline color-picker widget based on bootstrap. Thus, the old wizard type
`colorbox` has been marked as deprecated.
Impact
======
Using the TCA wizard type `colorbox` will trigger a deprecation log entry.
The possibility to pick the color from a custom image has been removed
without substitution together with the possibility to use color names like
"red" or "white".
Affected Installations
======================
All TCA fields that are using the wizard type `colorbox`, like e.g.
.. code-block:: php
$GLOBALS['TCA']['tableName']['fieldName']['config']['wizards']['colorbox'] = [
'type' => 'colorbox',
'script' => 'wizard_colorpicker.php',
...
];
Migration
=========
Use the new render-type `colorpicker` in the TCA field configuration, like e.g.
.. code-block:: php
$GLOBALS['TCA']['tableName']['fieldName']['config']['renderType'] = 'colorpicker';
.. index:: PHP-API, TCA, Backend
@@ -0,0 +1,43 @@
.. include:: /Includes.rst.txt
.. _deprecation-75327:
==========================================================
Deprecation: #75327 - $TSFE->csConvObj and $TSFE->csConv()
==========================================================
See :issue:`75327`
Description
===========
The public property `csConvObj` and the public method `csConv()` inside the TypoScriptFrontendController PHP
class have been marked as deprecated.
Impact
======
Calling `$TSFE->csConv()` will trigger a deprecation log entry.
Affected Installations
======================
Any TYPO3 installation which uses the property or the method directly.
Migration
=========
If a charset conversion is necessary, the conversion can be done directly by instantiating the charset converter class.
.. code-block:: php
$from = 'iso-8859-15';
/** @var \TYPO3\CMS\Core\Charset\CharsetConverter $charsetConverter */
$charsetConverter = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Charset\CharsetConverter::class);
$output = $charsetConverter->conv($str, $charsetConverter->parse_charset($from), 'utf-8');
.. index:: PHP-API, Frontend
@@ -0,0 +1,47 @@
.. include:: /Includes.rst.txt
.. _deprecation-75340:
=================================================================================
Deprecation: #75340 - Methods related to generating traditional Backend AJAX URLs
=================================================================================
See :issue:`75340`
Description
===========
The following methods have been marked as deprecated:
* TYPO3\CMS\Backend\Utility\BackendUtility->getAjaxUrl()
* TYPO3\CMS\Backend\Routing\UriBuilder->buildUriFromAjaxId()
Impact
======
Calling one of the methods above will trigger a deprecation log entry.
Affected Installations
======================
Any TYPO3 instance with a third party extension that calls one of the methods above.
Migration
=========
Migrate to UriBuilder routes, which can be registered via Configuration/Backend/AjaxRoutes.php,
and can be linked to like this:
.. code-block:: php
/** @var \TYPO3\CMS\Backend\Routing\UriBuilder $uriBuilder */
$uriBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\UriBuilder::class);
$path = $uriBuilder->buildUriFromRoute('ajax_myroute');
Keep in mind that the newly created Ajax routes need to implement PSR-7 as well.
.. index:: PHP-API, Backend
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _deprecation-75371:
==================================
Deprecation: #75371 - array2xml_cs
==================================
See :issue:`75371`
Description
===========
The method :php:`GeneralUtility::array2xml_cs()` has been marked as deprecated.
Impact
======
Using the method :php:`GeneralUtility::array2xml_cs()` will trigger a deprecation log entry.
Affected Installations
======================
All installations with third party extensions using this method are affected.
Migration
=========
Use :php:`GeneralUtility::array2xml()` instead. The XML declaration must be written manually.
Example code:
.. code-block:: php
// Deprecated
$bodyText = GeneralUtility::array2xml_cs($array, 'phparray');
// Migrated
$bodyText = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' . LF . GeneralUtility::array2xml($array, '', 0, 'phparray');
.. index:: PHP-API
@@ -0,0 +1,39 @@
.. include:: /Includes.rst.txt
.. _deprecation-75575:
==================================================================================
Deprecation: #75575 - TranslateViewHelper htmlEscape argument marked as deprecated
==================================================================================
See :issue:`75575`
Description
===========
The htmlEscape argument of the TranslateViewHelper has been marked as deprecated.
This ViewHelper now HTML escapes the translation by default. The argument value has no effect anymore.
Impact
======
Usages of `<f:translate>` view helper with argument set to `false` will have the label HTML escaped anyway.
Usages of `<f:translate>` view helper with argument set to `true` will have the label HTML escaped like before unless the view helper is wrapped with a `<f:format.raw>`
Affected Installations
======================
Installations with usages of `<f:translate>` in a context where HTML escaping is not desired (e.g. JavaScript).
Migration
=========
`<f:translate>` needs to be wrapped by `<f:format.raw>` if the view helper result is needed in a different context than HTML
.. index:: Fluid, Frontend
@@ -0,0 +1,57 @@
.. include:: /Includes.rst.txt
.. _deprecation-75621:
============================================
Deprecation: #75621 - GeneralUtility methods
============================================
See :issue:`75621`
Description
===========
The following methods within `GeneralUtility` have been marked as deprecated:
* compat_version()
* convertMicrotime()
* deHSCentities()
* slashJS()
* rawUrlEncodeJS()
* rawUrlEncodeFP()
* lcfirst()
* getMaximumPathLength()
The second parameter of :php:`GeneralUtility::wrapJS()` has been removed.
Impact
======
Calling any of the methods above will trigger a deprecation log entry.
Calling :php:`GeneralUtility::wrapJS()` with the second parameter will trigger a PHP notice message.
Affected Installations
======================
Any installation with a third-party extension calling one of the methods in its PHP code.
Migration
=========
For the following methods, use the native PHP methods and constants directly that are used within these methods:
* compat_version()
* convertMicrotime()
* deHSCentities()
* slashJS()
* rawUrlEncodeJS()
* rawUrlEncodeFP()
* lcfirst()
* getMaximumPathLength()
.. index:: PHP-API
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _deprecation-75625:
=======================================================
Deprecation: #75625 - Deprecated cache clearing options
=======================================================
See :issue:`75625`
Description
===========
The following commands have been marked as deprecated and should not be used anymore:
* Method :php:`DataHandler->clear_cacheCmd()` with arguments `system` and `temp_cached`
* `userTSconfig` setting `options.clearCache.system`
* Option `$TYPO3_CONF_VARS['SYS']['clearCacheSystem']` has been removed
Impact
======
Directly or indirectly using method `clear_cacheCmd` with these arguments will trigger a deprecation log entry.
Affected Installations
======================
All installations with third party extensions using this method are affected.
Migration
=========
If the group of system caches needs to be deleted explicitly, use :php:`flushCachesInGroup('system')`
of `CacheManager` directly.
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,26 @@
.. include:: /Includes.rst.txt
.. _feature-27471:
===============================================
Feature: #27471 - Allow asterisk for hideTables
===============================================
See :issue:`27471`
Description
===========
It is now possible to hide all tables from list view via PageTS-Config.
You want to show only a specific table, you can hide all tables and unhide only the specific one.
.. code-block:: typoscript
mod.web_list {
hideTables = *
table.tx_cal_event.hideTable = 0
}
.. index:: TSConfig, Backend
@@ -0,0 +1,24 @@
.. include:: /Includes.rst.txt
.. _feature-39597:
========================================================================
Feature: #39597 - Multiple locale names for TypoScript config.locale_all
========================================================================
See :issue:`39597`
Description
===========
The TypoScript option `config.locale_all` now allows to set locale fallbacks as a comma-separated list, as the
underlying PHP function `setlocale()` does as well.
.. code-block:: typoscript
config.locale_all = de_AT@euro, de_AT, de_DE, deu_deu
..
.. index:: TypoScript, Frontend
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _feature-69439:
========================================================================
Feature: #69439 - Enhance SQL query reduction in page tree in workspaces
========================================================================
See :issue:`69439`
Description
===========
The process of determining whether a page has workspace versions can be
extended by custom application code utilizing hooks. This way, the meaning
of having versions can be further modified by hooks. For instance the
default behavior of the TYPO3 core is to create a workspace version
record on persisting the same record in the backend - without any
actual changes to the data model.
+ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\\CMS\\Workspaces\\Service\\WorkspaceService']['hasPageRecordVersions']
+ $parameters['workspaceId']: The submitted workspace ID
+ $parameters['pageId']: The submitted page ID
+ $parameters['versionsOnPageCache']: Reference to the state array
+ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\\CMS\\Workspaces\\Service\\WorkspaceService']['fetchPagesWithVersionsInTable']
+ $parameters['workspaceId']: The submitted workspace ID
+ $parameters['pageId']: The submitted page ID
+ $parameters['pagesWithVersionsInTable']: Reference to the state array
Impact
======
The hooks introduce the possibility to modify the determined results - only if those hooks are used.
.. index:: Database, LocalConfiguration, ext:workspaces
@@ -0,0 +1,70 @@
.. include:: /Includes.rst.txt
.. _feature-70056:
===========================================================================
Feature: #70056 - Added PHP library "Guzzle" for HTTP Requests within TYPO3
===========================================================================
See :issue:`70056`
Description
===========
The PHP library `Guzzle` has been added via composer dependency to work as a feature rich solution for creating HTTP requests
based on the PSR-7 interfaces already used within TYPO3.
Guzzle auto-detects available underlying adapters available on the system, like cURL or stream wrappers and chooses
the best solution for the system.
A TYPO3-specific PHP class called `TYPO3\CMS\Core\Http\RequestFactory` has been added as a simplified wrapper to access
Guzzle clients.
All options available under `$TYPO3_CONF_VARS[HTTP]` are automatically applied to the Guzzle clients when using the
`RequestFactory` class. The options are a subset to the available options on Guzzle (http://docs.guzzlephp.org/en/latest/request-options.html)
but can further be extended.
Existing `$TYPO3_CONF_VARS[HTTP]` options have been removed and/or migrated to the new Guzzle-compliant options.
A full documentation for Guzzle can be found at http://docs.guzzlephp.org/en/latest/.
Although Guzzle can handle Promises/A+ and asynchronous requests, it currently acts as a drop-in replacement for the
previous mixed options and implementations within `GeneralUtility::getUrl()` and a PSR-7-based API for HTTP
requests.
Impact
======
The existing TYPO3-specific wrapper `GeneralUtility::getUrl()` now uses Guzzle under the hood automatically for remote
files, removing the need to configure settings based on certain implementations like stream wrappers or cURL directly.
The `RequestFactory` class can be used like this:
.. code-block:: php
// Initiate the Request Factory, which allows to run multiple requests
/** @var \TYPO3\CMS\Core\Http\RequestFactory $requestFactory */
$requestFactory = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Http\RequestFactory\RequestFactory::class);
$url = 'https://typo3.com';
$additionalOptions = [
// Additional headers for this specific request
'headers' => ['Cache-Control' => 'no-cache'],
// Additional options, see http://docs.guzzlephp.org/en/latest/request-options.html
'allow_redirects' => false,
'cookies' => true
];
// Return a PSR-7 compliant response object
$response = $requestFactory->request($url, 'GET', $additionalOptions);
// Get the content as a string on a successful request
if ($response->getStatusCode() === 200) {
if ($response->getHeader('Content-Type') === 'text/html') {
$content = $response->getBody()->getContents();
}
}
Extension authors are advised to use the `RequestFactory` class instead of using the Guzzle API directly in order to ensure
a clear upgrade path when updates to the underlying API need to be done.
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,23 @@
.. include:: /Includes.rst.txt
.. _feature-72923:
==================================================================================
Feature: #72923 - Configure the number of files shown per page in file list module
==================================================================================
See :issue:`72923`
Description
===========
It is now possible to configure the maximum number of files shown per page in the file list module using User TSconfig.
.. code-block:: typoscript
options.file_list {
filesPerPage = 40
}
.. index:: TSConfig, Backend
@@ -0,0 +1,31 @@
.. include:: /Includes.rst.txt
.. _feature-75386:
==================================================
Feature: #75386 - Get identifier in slide callback
==================================================
See :issue:`75386`
Description
===========
The callback of :js:`Wizard.addSlide()` now has a new parameter `identifier`.
Impact
======
The identifier is passed to the callback function of :js:`Wizard.addSlide()`.
Example code:
.. code-block:: javascript
Wizard.addSlide('my-identifier', 'Foobar', '', Severity.info, function($slide, settings, identifier) {
console.log(identifier); // my-identifier
});
.. index:: JavaScript, Backend
@@ -0,0 +1,114 @@
.. include:: /Includes.rst.txt
.. _feature-75454:
=========================================================================================
Feature: #75454 - Added PHP library "Doctrine DBAL" for Database Connections within TYPO3
=========================================================================================
See :issue:`75454`
Description
===========
The PHP library `Doctrine DBAL` has been added via composer dependency to work as a powerful database
abstraction layer with many features for database abstraction, schema introspection and
schema management within TYPO3.
A TYPO3-specific PHP class called `TYPO3\CMS\Core\Database\ConnectionPool` has been added as a
manager for database connections.
All connections configured below `$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']` are
accessible using this manager, enabling the parallel usage of multiple database systems.
By using the database abstraction options and the QueryBuilder provided SQL statements being
built will be properly quoted and compatible with different DBMS out of the box as far as
possible.
Existing `$GLOBALS['TYPO3_CONF_VARS']['DB']` options have been removed and/or migrated to the
new Doctrine-compliant options.
Documentation for Doctrine DBAL can be found at http://www.doctrine-project.org/projects/dbal.html.
The :php:`Connection` class provides convenience methods for `insert`, `select`, `update`,
`delete` and `truncate` statements. For `select`, `update` and `delete` only simple
equality comparisons (`WHERE "aField" = 'aValue'`) are supported. For complex statements it's
required to use the :php:`QueryBuilder`.
It is possible to swap tables out of the default database and use a specific setup (e.g.
for logging or caching). This snippet of a LocalConfiguration could for example be used
to swap the sys_log table out to another database or even another database server:
.. code-block:: php
//LocalConfiguration.php
//[...]
'DB' => [
'Connections' => [
'Default' => [
'charset' => 'utf8',
'dbname' => 'default_dbname',
'driver' => 'mysqli',
'host' => 'default_host',
'password' => '***',
'port' => 3306,
'user' => 'default_user',
],
'Syslog' => [
'charset' => 'utf8',
'dbname' => 'syslog_dbname',
'driver' => 'mysqli',
'host' => 'syslog_host',
'password' => '***',
'port' => 3306,
'user' => 'syslog_user',
],
],
'TableMapping' => [
'sys_log' => 'Syslog'
]
],
//[...]
Impact
======
Currently the :php:`DatabaseConnection` class only uses Doctrine to establish the database
connection to MySQL, no advanced options are being used yet.
Connections always need to be requested with a table name so that the abstraction of
table names to database connections stays intact.
The :php:`ConnectionPool` class can be used like this:
.. code-block:: php
// Get a connection which can be used for multiple operations
/** @var \TYPO3\CMS\Core\Database\Connecction $conn */
$conn = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('aTable');
$affectedRows = $conn->insert(
'aTable',
$fields, // Associative array of column/value pairs, automatically quoted & escaped
);
.. code-block:: php
// Get a QueryBuilder, which should only be used a single time
$query = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('aTable);
$query->select('*')
->from('aTable)
->where(
$query->expr()->eq('aField', $query->createNamedParameter($aValue)),
$query->expr()->lte(
'anotherField',
$query->createNamedParameter($anotherValue)
)
);
$rows = $query->execute()->fetchAll();
Extension authors are advised to use the `ConnectionPool` and `Connection` classes instead of using
the Doctrine DBAL directly in order to ensure a clear upgrade path when updates to the underlying
API need to be done.
.. index:: PHP-API, Database, LocalConfiguration
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _feature-75497:
==============================================
Feature: #75497 - inline backend layout wizard
==============================================
See :issue:`75497`
Description
===========
A new renderType was added to render the backend layout wizard inline in FormEngine.
Impact
======
The old `BackendLayoutWizardController` which has rendered the backend layout wizard in a popup has been removed.
Use the new renderType `belayoutwizard` to render the backend layout wizard inline in FormEngine.
example TCA configuration:
.. code-block:: php
'config' => array(
'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:backend_layout.config',
'config' => array(
'type' => 'text',
'renderType' => 'belayoutwizard',
)
)
.. index:: TCA, Backend
@@ -0,0 +1,45 @@
.. include:: /Includes.rst.txt
.. _feature-75579:
====================================================================
Feature: #75579 - Add markupIdentifier support to JavaScript IconAPI
====================================================================
See :issue:`75579`
Description
===========
It is now possible to request alternative rendering methods also through the
JavaScript IconAPI for the backend. A new parameter has been added to the `getIcon`
function that now accepts the `markupIdentifier` for alternative rendering output,
as it's also possible within PHP.
Currently this is only used by the `SvgIconProvider` to deliver inline-SVGs
instead of linking them in an `img` tag.
Example 1: default, without alternativeMarkup
.. code-block:: javascript
require(['TYPO3/CMS/Backend/Icons'], function(Icons) {
var iconName = 'actions-view-list-collapse';
Icons.getIcon(iconName, Icons.sizes.small).done(function(icon) {
console.log(icon);
});
});
Example 2: with alternativeMarkup = inline
.. code-block:: javascript
require(['TYPO3/CMS/Backend/Icons'], function(Icons) {
var iconName = 'actions-view-list-collapse';
Icons.getIcon(iconName, Icons.sizes.small, null, null, 'inline').done(function(icon) {
console.log(icon);
});
});
.. index:: JavaScript, Backend
@@ -0,0 +1,27 @@
.. include:: /Includes.rst.txt
.. _feature-75581:
=========================================
Feature: #75581 - Simplify cache clearing
=========================================
See :issue:`75581`
Description
===========
The cache clearing system has been simplified by removing options in cache clear menu and install tool.
The cache clear menu in the backend contains now only two options:
* Flush frontend caches
Clear frontend and page-related caches, like before.
* Flush all caches
Clear all system-related caches, including the class loader, localization, extension configuration file caches and opcode caches. Rebuilding this cache may take some time.
Within the install tool the "Clear all cache" button will now also clear the opcode caches if possible.
.. index:: Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _feature-75827:
=============================================================================================================
Feature: #75827 - Add configuration options to \\TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\FloatConverter
=============================================================================================================
See :issue:`75827`
Description
===========
It is now possible to define the thousands separator and decimal point for `FloatConverter`.
This can be used to ensure proper sanitation before converting a string to a float.
You can define the configuration for every property like this:
.. code-block:: php
$this->arguments['<argumentName>']
->getPropertyMappingConfiguration()
->forProperty('<propertyName>') // this line can be skipped in order to specify the format for all properties
->setTypeConverterOption(
\TYPO3\CMS\Extbase\Property\TypeConverter\FloatConverter::class,
\TYPO3\CMS\Extbase\Property\TypeConverter\FloatConverter::CONFIGURATION_THOUSANDS_SEPARATOR,
'.'
)
->setTypeConverterOption(
\TYPO3\CMS\Extbase\Property\TypeConverter\FloatConverter::class,
\TYPO3\CMS\Extbase\Property\TypeConverter\FloatConverter::CONFIGURATION_DECIMAL_POINT,
','
);
.. index:: PHP-API, ext:extbase
@@ -0,0 +1,18 @@
.. include:: /Includes.rst.txt
.. _important-73041:
===============================================================
Important: #73041 - PackageStates Includes Only Active Packages
===============================================================
See :issue:`73041`
Description
===========
The information about available packages in the system located in :file:`typo3conf/PackageStates.php` was
thinned out to only include the extension keys of the active (= installed) extensions.
.. index:: PHP-API
+52
View File
@@ -0,0 +1,52 @@
:template: changelogOverview.html
.. include:: /Includes.rst.txt
.. _changelog-8-1:
8.1 Changes
===========
**Table of contents**
.. contents::
:local:
:depth: 1
Breaking Changes
^^^^^^^^^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Breaking-*
Features
^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Feature-*
Deprecation
^^^^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Deprecation-*
Important
^^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Important-*