TYPO3 v15 dev-main snapshot ()
This commit is contained in:
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _breaking-86492:
|
||||
|
||||
=======================================================================
|
||||
Breaking: #86492 - Removed stdWrap support for config.additionalHeaders
|
||||
=======================================================================
|
||||
|
||||
See :issue:`86492`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The feature to use :typoscript:`stdWrap` for :typoscript:`config.additionalHeaders` has been removed due to
|
||||
an incompatibility with page caching.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
:typoscript:`stdWrap` cannot be used anymore to manipulate additional headers set via TypoScript.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 instance that uses this feature, which has been introduced with version 9.0.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
For the time being there will be no TypoScript based solution for dynamic HTTP headers.
|
||||
|
||||
Consider implementing a PSR-15 middleware to add advanced logic for additional frontend response headers.
|
||||
|
||||
.. index:: Frontend, TypoScript, NotScanned, ext:frontend
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-83793:
|
||||
|
||||
=============================================================
|
||||
Deprecation: #83793 - FAL ResourceStorage->dumpFileContents()
|
||||
=============================================================
|
||||
|
||||
See :issue:`83793`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TYPO3\CMS\Core\Resource\ResourceStorage->dumpFileContents()` has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling this method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions, which use the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use :php:`TYPO3\CMS\Core\Resource\ResourceStorage->streamFile()` instead.
|
||||
|
||||
.. index:: FAL, PHP-API, FullyScanned
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84196:
|
||||
|
||||
=================================================================================
|
||||
Deprecation: #84196 - Backend controller actions do not receive prepared response
|
||||
=================================================================================
|
||||
|
||||
See :issue:`84196`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The second argument to backend and eID controller actions has been marked as deprecated.
|
||||
Controllers should create a response object implementing
|
||||
:php:`Psr\Http\Message\ResponseInterface` on their own instead of relying
|
||||
on a prepared response.
|
||||
|
||||
The signature of controller actions should look like
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function myAction(ServerRequestInterface $request): ResponseInterface
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Controllers should typically instantiate one of the three core response classes
|
||||
and return it. Note that these classes are internal API and it is therefore
|
||||
recommended to use PSR-17 reponse factory interfaces once updating to TYPO3 v10
|
||||
instead.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function myAction(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
return new HtmlResponse('content');
|
||||
return new JsonResponse($jsonArray);
|
||||
return new RedirectResponse($url);
|
||||
}
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions that register backend controllers (eg. modules) or eID
|
||||
may be affected.
|
||||
|
||||
The dynamic scanning for not yet adapted controller actions relies on reflection and
|
||||
costs some CPU cycles. If all affected extensions have been adapted, the feature toggle
|
||||
:php:`simplifiedControllerActionDispatching` should be enabled. This can be managed in
|
||||
the backend Settings -> Configure Installation-Wide Options module.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
See above code examples for typical controller actions return values and signature.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned
|
||||
@@ -0,0 +1,80 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85031:
|
||||
|
||||
======================================================
|
||||
Deprecation: #85031 - Protected ImportExportController
|
||||
======================================================
|
||||
|
||||
See :issue:`85031`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Impexp\Controller\ImportExportController` changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* [not scanned] :php:`pageinfo`
|
||||
* [not scanned] :php:`id`
|
||||
* [not scanned] :php:`perms_clause`
|
||||
* [not scanned] :php:`extObj`
|
||||
* [not scanned] :php:`doc`
|
||||
* [not scanned] :php:`content`
|
||||
* [not scanned] :php:`extClassConf`
|
||||
* [not scanned] :php:`modMenu_setDefaultList`
|
||||
* [not scanned] :php:`modMenu_dontValidateList`
|
||||
* [not scanned] :php:`modMenu_type`
|
||||
* [not scanned] :php:`modTSconfig`
|
||||
* [not scanned] :php:`MOD_SETTINGS`
|
||||
* [not scanned] :php:`MOD_MENU`
|
||||
* [not scanned] :php:`CMD`
|
||||
* [not scanned] :php:`MCONF`
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Impexp\Controller\ImportExportController` changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* [not scanned] :php:`init()`
|
||||
* [not scanned] :php:`main()`
|
||||
* [not scanned] :php:`exportData()`
|
||||
* :php:`addRecordsForPid()`
|
||||
* :php:`exec_listQueryPid()`
|
||||
* :php:`makeConfigurationForm()`
|
||||
* :php:`makeAdvancedOptionsForm()`
|
||||
* :php:`makeSaveForm()`
|
||||
* [not scanned] :php:`importData()`
|
||||
* [not scanned] :php:`checkUpload()`
|
||||
* :php:`getTableSelectOptions()`
|
||||
* :php:`filterPageIds()`
|
||||
* [not scanned] :php:`getExtObjContent()`
|
||||
* [not scanned] :php:`extObjContent()`
|
||||
* [not scanned] :php:`extObjHeader()`
|
||||
* [not scanned] :php:`checkSubExtObj()`
|
||||
* [not scanned] :php:`checkExtObj()`
|
||||
* [not scanned] :php:`getExternalItemConfig()`
|
||||
* [not scanned] :php:`handleExternalFunctionValue()`
|
||||
* [not scanned] :php:`mergeExternalItems()`
|
||||
* [not scanned] :php:`menuConfig()`
|
||||
|
||||
Additionally, the assignment of an object instance of class :php:`ImportExportController` as
|
||||
:php:`GLOBALS['SOBE']` has been marked as deprecated and will not be set anymore in TYPO3 v10.
|
||||
|
||||
Furthermore, class :php:`ImportExportController` does not inherit class :php:`BaseScriptClass` anymore.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods or accessing above properties triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
It is relatively unlikely instances are affected by this change since it is rather uncommon
|
||||
to extend the import / export extension. The extension scanner will find some of the usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible.
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:impexp
|
||||
@@ -0,0 +1,59 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85970:
|
||||
|
||||
=========================================
|
||||
Deprecation: #85970 - FILE content object
|
||||
=========================================
|
||||
|
||||
See :issue:`85970`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The cObject :typoscript:`FILE` mixed concerns (rendering an image, or dumping file contents), and
|
||||
rather became low-level since Fluid's rise in rendering Frontend.
|
||||
|
||||
:typoscript:`FILE` shows an image if the file is jpg,jpeg,gif,png (but not SVG). If a
|
||||
different file ending is detected, it will check if the file is less than 1MB, and will get its contents
|
||||
and output that. If the file is 1 byte bigger, nothing is done.
|
||||
Fluid offers more flexibility nowadays.
|
||||
|
||||
Thus, cObject :typoscript:`FILE` will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Instances using the TypoScript cObject :typoscript:`FILE` will find PHP :php:`E_USER_DEPRECATED` errors for each usage.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using the TypoScript cObject :typoscript:`FILE`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use :typoscript:`IMAGE` to show images instead.
|
||||
|
||||
For realising :typoscript:`TEMPLATE`, migrate to using :typoscript:`FLUIDTEMPLATE`. It comes with all
|
||||
the benefits Fluid offers.
|
||||
|
||||
However due to the flexibility of custom cObjects, an extension author could just re-implement
|
||||
the functionality in a custom extension within minutes.
|
||||
See this example for ext:frontend where the registration resides in :file:`ext_localconf.php`.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['ContentObjects'] = array_merge(
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['ContentObjects'],
|
||||
[
|
||||
'FILE' => \TYPO3\CMS\Frontend\ContentObject\FileContentObject::class,
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
.. index:: TypoScript, NotScanned
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85980:
|
||||
|
||||
==============================================================
|
||||
Deprecation: #85980 - @internal annotation in extbase commands
|
||||
==============================================================
|
||||
|
||||
See :issue:`85980`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`@internal` annotation has been marked as deprecated and will be removed from TYPO3 v10
|
||||
without any replacement.
|
||||
|
||||
This is a regular phpDocumentor annotation that is used to denote that associated structural
|
||||
elements are elements internal to the application or library. It has been misused by Extbase to tell
|
||||
if a command is internal and thus should not be exposed through help texts, user documentation etc.
|
||||
|
||||
TYPO3 does no longer support the use of the :php:`@internal` annotation to influence the behaviour
|
||||
of the code.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :php:`@internal` on methods of classes extending
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Controller\CommandController` will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations that make use of Extbase commands whose methods are tagged with :php:`@internal`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Just remove the annotation from the affected controllers.
|
||||
|
||||
.. index:: ext:extbase, NotScanned
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-83094-1668719172:
|
||||
|
||||
===============================================
|
||||
Deprecation: #83094 - Annotation @flushesCaches
|
||||
===============================================
|
||||
|
||||
See :issue:`85981`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`@flushesCaches` annotation has been marked as deprecated and will be removed with TYPO3 v10.
|
||||
The annotation was introduced during backport from FLOW and never implemented to actually do anything
|
||||
useful. It will be removed without substitution.
|
||||
|
||||
With it, the method :php:`TYPO3\CMS\Extbase\Mvc\Cli\Command->isFlushingCaches()` has been marked as deprecated
|
||||
and will also be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Usage of Annotation :php:`@flushesCaches` and method :php:`TYPO3\CMS\Extbase\Mvc\Cli\Command->isFlushingCaches()`
|
||||
will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All extensions that use :php:`@flushesCaches` or call the method :php:`TYPO3\CMS\Extbase\Mvc\Cli\Command->isFlushingCaches()`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Just remove annotation and method call. They did not do anything before.
|
||||
|
||||
.. index:: PHP-API, ext:extbase, FullyScanned
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86047:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #86047 - TSFE properties / methods and change visibility
|
||||
=====================================================================
|
||||
|
||||
See :issue:`86047`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController` have changed their visibility from public to protected and should not be called any longer.
|
||||
|
||||
* :php:`pageAccessFailureHistory`
|
||||
* :php:`workspacePreview` (not in use anymore)
|
||||
* :php:`ADMCMD_preview_BEUSER_uid` (not in use anymore)
|
||||
* :php:`debug` (not in use anymore)
|
||||
* :php:`MP_defaults` (not in use anymore outside of TSFE)
|
||||
* :php:`loginAllowedInBranch` (use checkIfLoginAllowedInBranch())
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController` have changed their visibility from public to protected, as their purpose is to be called from
|
||||
within :php:`TypoScriptFrontendController`.
|
||||
|
||||
* :php:`tempPageCacheContent()`
|
||||
* :php:`realPageCacheContent()`
|
||||
* :php:`setPageCacheContent()`
|
||||
* :php:`clearPageCacheContent_pidList()`
|
||||
* :php:`setSysLastChanged()`
|
||||
* :php:`contentStrReplace()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the PHP methods will trigger a PHP :php:`E_USER_DEPRECATED` error, as well as accessing any of the
|
||||
previously public properties.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with extensions directly calling one of the methods or using one of the
|
||||
public properties.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
For :php:`TypoScriptFrontendController->ADMCMD_preview_BEUSER_uid` use the backend.user aspect of the Context API.
|
||||
For :php:`TypoScriptFrontendController->workspacePreview` use the workspace aspect of the Context API.
|
||||
For :php:`TypoScriptFrontendController->loginAllowedInBranch` use the method :php:`checkIfLoginAllowedInBranch()` instead.
|
||||
|
||||
.. index:: Frontend, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86068:
|
||||
|
||||
==========================================
|
||||
Deprecation: #86068 - old condition syntax
|
||||
==========================================
|
||||
|
||||
See :issue:`86068`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Symfony expression language is available for TypoScript since :issue:`85829` has been merged.
|
||||
Accordingly the classic TypoScript condition syntax has been marked as deprecated.
|
||||
|
||||
For detailed information about the new expression language see :doc:`#85829 <../9.4/Feature-85829-ImplementSymfonyExpressionLanguageForTypoScriptConditions>`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the old condition syntax will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Also the combination of multiple condition blocks with :typoscript:`AND`, :typoscript:`OR`, :typoscript:`&&` and :typoscript:`||` has been
|
||||
marked as deprecated and will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
If it is not possible yet to fully migrate to Symfony expression language, the feature flag :php:`[SYS][features][TypoScript.strictSyntax]`
|
||||
can be disabled via Settings -> Configure Installation-Wide Options or directly in :file:`LocalConfiguration.php`.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions which define conditions using the old syntax or setups which
|
||||
make use of the old condition syntax.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The old conditions can be replaced with the new expression language.
|
||||
|
||||
.. index:: Backend, Frontend, TSConfig, TypoScript, NotScanned, ext:core
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86110:
|
||||
|
||||
===============================================
|
||||
Deprecation: #86110 - FrontendEditingController
|
||||
===============================================
|
||||
|
||||
See :issue:`86110`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The class :php:`\TYPO3\CMS\Core\FrontendEditing\FrontendEditingController` is not in use anymore, only feedit
|
||||
instantiates the class for legacy reasons.
|
||||
|
||||
Also, property :php:`FrontendBackendUserAuthentication->frontendEdit` which holds an instance of
|
||||
it, has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The functionality of this class has been moved into ext:feedit.
|
||||
If an instance needs access to frontend editing, it can be accessed from there.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances accessing the deprecated class or function will **NOT** trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Refer to ext:feedit for inspiration.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:feedit
|
||||
@@ -0,0 +1,113 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86163:
|
||||
|
||||
========================================================
|
||||
Deprecation: #86163 - TCA type="user" without renderType
|
||||
========================================================
|
||||
|
||||
See :issue:`86163`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following :php:`TCA` properties on :php:`type="user"` config types have been marked as deprecated and
|
||||
should not be used any longer:
|
||||
|
||||
* :php:`userFunc`
|
||||
* :php:`parameters`
|
||||
* :php:`noTableWrapping`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This especially means that :php:`userFunc` should not be used any longer on :php:`TCA` fields
|
||||
registered as config type :php:`user`. Those can be substituted with a custom :php:`renderType`
|
||||
since TYPO3 v7. See example below for more details.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances are affected if an extension registers a :php:`type=user` :php:`TCA` config type with a
|
||||
custom :php:`userFunc`. If a field uses the :php:`userFunc` property, a PHP :php:`E_USER_DEPRECATED`
|
||||
error is triggered during rendering.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
:php:`userFunc` implementations can switch to use a custom :php:`renderType` as outlined
|
||||
in the :ref:`FormEngine documentation <t3coreapi:FormEngine-Rendering-NodeFactory>`. The TYPO3 core
|
||||
did that for example with the `is_public` field of table `sys_file_storge` in patch 58141_.
|
||||
|
||||
To switch from a :php:`userFunc` implementation to a :php:`renderType`, an extension typically has
|
||||
to register an own element node in :file:`ext_localconf.php`. Then change the user function to a class
|
||||
that extends :php:`AbstractFormElement` where method :php:`render()` returns an array as defined
|
||||
in helper method :php:`initializeResultArray`. The `HTML` created by the former user function should be
|
||||
returned in :php:`$resultArray['html']`, parameters like the `tableName` can be found in :php:`$this->data`.
|
||||
|
||||
Note the `renderType` variant can additionally load custom `JavaScript` and `CSS` using further parts of the
|
||||
result array, typically :php:`requireJsModules` and :php:`stylesheetFiles`. Arguments to the element
|
||||
can be defined by using any property within the `config` section, it is up to the specific `renderType` to
|
||||
do this, using `parameters` as property key is probably a good idea, though.
|
||||
|
||||
As example, imagine a :php:`TCA` user element has been defined like this in the `columns` section::
|
||||
|
||||
'myMapElement' = [
|
||||
'label' => 'My map element'
|
||||
'config' => [
|
||||
'type' => 'user',
|
||||
'userFunc' => 'Vendor\Extension\Tca\UserFunc\MyMap->render',
|
||||
'parameters' => [
|
||||
'useOpenStreetMap' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
This should be adapted to a registered node element class::
|
||||
|
||||
// Register a node in ext_localconf.php
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][<unix timestamp of "now">] = [
|
||||
'nodeName' => 'customMapElement',
|
||||
'priority' => 40,
|
||||
'class' => \Vendor\Extension\Form\Element\CustomMapElement::class,
|
||||
];
|
||||
|
||||
With a `TCA` registration like this to delegate the element rendering to the registered class::
|
||||
|
||||
'myMapElement' = [
|
||||
'label' => 'My map element'
|
||||
'config' => [
|
||||
'type' => 'user',
|
||||
'renderType' => 'customMapElement',
|
||||
'parameters' => [
|
||||
'useOpenStreetMap' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
And a class implementation that extends :php:`AbstractFormElement`::
|
||||
|
||||
<?php
|
||||
declare(strict_types = 1);
|
||||
namespace Vendor\Extension\Form\Element;
|
||||
|
||||
use TYPO3\CMS\Backend\Form\Element\AbstractFormElement;
|
||||
|
||||
class CustomMapElement extends AbstractFormElement
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
// Custom TCA properties and other data can be found in $this->data, for example the above
|
||||
// parameters are available in $this->data['parameterArray']['fieldConf']['config']['parameters']
|
||||
$result = $this->initializeResultArray();
|
||||
$result['html'] = 'my map content';
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
.. _58141: https://review.typo3.org/#/c/58141/
|
||||
|
||||
.. index:: Backend, TCA, NotScanned
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86178:
|
||||
|
||||
============================================================
|
||||
Deprecation: #86178 - Class ElementBrowserFramesetController
|
||||
============================================================
|
||||
|
||||
See :issue:`86178`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Class :php:`TYPO3\CMS\Recordlist\Controller\ElementBrowserFramesetController` and the route
|
||||
target of :php:`browser` have been marked as deprecated and should not be used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If calling that controller class a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The route target is unused in core for a while already. Extensions are only affected
|
||||
if they call the Backend route target :php:`browser` that renders the element browser
|
||||
in a frameset.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the modal based element browser with the route :php:`wizard_element_browser` instead.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:recordlist
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86179:
|
||||
|
||||
====================================================================
|
||||
Deprecation: #86179 - Protected render() method in BackendController
|
||||
====================================================================
|
||||
|
||||
See :issue:`86179`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`TYPO3\CMS\Backend\Controller\BackendController->render()` has changed visibility
|
||||
from public to protected and should not be called any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method from an external object triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
This internal method is usually not called by extensions directly. Since the method name
|
||||
is so generic, the extension scanner is not configured to search for usages, it would
|
||||
trigger far too many false positives.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use route target :php:`main` instead that calls method :php:`mainAction` and returns a
|
||||
proper PSR-7 Response object.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86180:
|
||||
|
||||
================================================================
|
||||
Deprecation: #86180 - Protected methods in SetupModuleController
|
||||
================================================================
|
||||
|
||||
See :issue:`86180`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Setup\Controller\SetupModuleController`
|
||||
changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* [not scanned] :php:`main()`
|
||||
* [not scanned] :php:`init()`
|
||||
* :php:`storeIncomingData()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods from an external object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
These methods are usually called internally only, extensions should not be affected by this.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the entry method :php:`mainAction()` that returns a PSR-7 response object.
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:setup
|
||||
@@ -0,0 +1,73 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86182:
|
||||
|
||||
====================================================
|
||||
Deprecation: #86182 - Protected TaskModuleController
|
||||
====================================================
|
||||
|
||||
See :issue:`86182`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Class :php:`TYPO3\CMS\Taskcenter\Controller\TaskModuleController` no longer inherits
|
||||
:php:`TYPO3\CMS\Backend\Module\BaseScriptClass`.
|
||||
|
||||
Single task classes should no longer expect to have an instance of the :php:`TaskModuleController`
|
||||
set as :php:`$GLOBALS['SOBE']`.
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Taskcenter\Controller\TaskModuleController`
|
||||
changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* [not scanned] :php:`MCONF`
|
||||
* [not scanned] :php:`id`
|
||||
* [not scanned] :php:`MOD_MENU`
|
||||
* [not scanned] :php:`modMenu_type`
|
||||
* [not scanned] :php:`modMenu_setDefaultList`
|
||||
* [not scanned] :php:`modMenu_dontValidateList`
|
||||
* [not scanned] :php:`content`
|
||||
* [not scanned] :php:`perms_clause`
|
||||
* [not scanned] :php:`CMD`
|
||||
* [not scanned] :php:`extClassConf`
|
||||
* [not scanned] :php:`extObj`
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Taskcenter\Controller\TaskModuleController`
|
||||
changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* [not scanned] :php:`menuConfig`
|
||||
* [not scanned] :php:`mergeExternalItems`
|
||||
* [not scanned] :php:`handleExternalFunctionValue`
|
||||
* [not scanned] :php:`getExternalItemConfig`
|
||||
* [not scanned] :php:`main`
|
||||
* :php:`urlInIframe`
|
||||
* [not scanned] :php:`extObjHeader`
|
||||
* [not scanned] :php:`checkSubExtObj`
|
||||
* [not scanned] :php:`checkExtObj`
|
||||
* [not scanned] :php:`extObjContent`
|
||||
* [not scanned] :php:`getExtObjContent`
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods from an external object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Most methods and properties are used internally in the :php:`TaskModuleController` only.
|
||||
Instances with extensions delivering additional tasks for the
|
||||
taskcenter may be affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Single task should no longer rely on having an instance of :php:`TaskModuleController` set as
|
||||
:php:`$GLOBALS['SOBE']`, an instance of the object is given as first constructor argument.
|
||||
|
||||
Properties and methods that have been set to protected should be calculated internally instead.
|
||||
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:taskcenter
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86184:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #86184 - Protected methods in ReportController
|
||||
===========================================================
|
||||
|
||||
See :issue:`86184`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Reports\Controller\ReportController`
|
||||
changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`indexAction()`
|
||||
* :php:`detailAction()`
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods from an external object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Both methods are called internally only. Extensions extending the reports module
|
||||
using the normal reports API are not affected by this.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:reports
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86192:
|
||||
|
||||
===================================================================
|
||||
Deprecation: #86192 - Protected methods in ElementBrowserController
|
||||
===================================================================
|
||||
|
||||
See :issue:`86192`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Recordlist\Controller\ElementBrowserController`
|
||||
changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`main()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the above method from an external object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The method is called internally only. Extensions are usually not affected by this.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the entry method :php:`mainAction()` that returns a PSR-7 response object.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:recordlist
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86193:
|
||||
|
||||
======================================================================
|
||||
Deprecation: #86193 - Protect methods in AbstractLinkBrowserController
|
||||
======================================================================
|
||||
|
||||
See :issue:`86193`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods changed their visibility from public to protected and
|
||||
should not be called any longer:
|
||||
|
||||
* :php:`TYPO3\CMS\Recordlist\Controller\AbstractLinkBrowserController->renderLinkAttributeFields()`
|
||||
* :php:`TYPO3\CMS\Recordlist\Controller\AbstractLinkBrowserController->getDisplayedLinkHandlerId()`
|
||||
* :php:`TYPO3\CMS\RteCKEditor\Controller\BrowseLinksController->renderLinkAttributeFields()`
|
||||
* :php:`TYPO3\CMS\RteCKEditor\Controller\BrowseLinksController->getPageConfigLabel()`
|
||||
* :php:`TYPO3\CMS\RteCKEditor\Controller\BrowseLinksController->getDisplayedLinkHandlerId()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods from an external object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
These link browser specific methods are usually not used by extensions externally. The extension
|
||||
scanner will reveal possible usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned, ext:reports
|
||||
@@ -0,0 +1,60 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86197:
|
||||
|
||||
==================================================
|
||||
Deprecation: #86197 - Protected FileListController
|
||||
==================================================
|
||||
|
||||
See :issue:`86197`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Filelist\Controller\FileListController` changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`MOD_MENU`
|
||||
* :php:`MOD_SETTINGS`
|
||||
* :php:`doc`
|
||||
* :php:`id`
|
||||
* :php:`pointer`
|
||||
* :php:`table`
|
||||
* :php:`imagemode`
|
||||
* :php:`cmd`
|
||||
* :php:`filelist`
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Filelist\Controller\FileListController` changed their visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`menuConfig()`
|
||||
* :php:`initializeView()`
|
||||
* :php:`initializeIndexAction()`
|
||||
* :php:`indexAction()`
|
||||
* :php:`missingFolderAction()`
|
||||
* :php:`searchAction()`
|
||||
|
||||
Also, :php:`TYPO3\CMS\Beuser\Controller\BackendUserController->initializeView()` changed visibility from public to protected and should not be called any longer.
|
||||
|
||||
Additionally, first constructor argument :php:`$fileListController` of class
|
||||
:php:`TYPO3\CMS\Filelist\FileList` is now optional, class property :php:`$fileListController`
|
||||
should not be used any longer in hooks of that class.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above properties or methods from a third party object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Controllers of the core are usually not called by extensions directly, but only through core routing and
|
||||
dispatching mechanisms. Extensions are unlikely to be affected by this change.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:filelist
|
||||
@@ -0,0 +1,111 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86198:
|
||||
|
||||
====================================================
|
||||
Deprecation: #86198 - Protected RecordListController
|
||||
====================================================
|
||||
|
||||
See :issue:`86198`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Recordlist\Controller\RecordListController` changed their visibility from public
|
||||
to protected and should not be called any longer:
|
||||
|
||||
* :php:`id`
|
||||
* :php:`pointer`
|
||||
* :php:`table`
|
||||
* :php:`search_field`
|
||||
* :php:`search_levels`
|
||||
* :php:`showLimit`
|
||||
* :php:`returnUrl`
|
||||
* :php:`clear_cache`
|
||||
* :php:`cmd`
|
||||
* :php:`cmd_table`
|
||||
* :php:`perms_clause`
|
||||
* :php:`pageinfo`
|
||||
* :php:`MOD_MENU`
|
||||
* :php:`content`
|
||||
* :php:`body`
|
||||
* :php:`imagemode`
|
||||
* :php:`doc`
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Recordlist\Controller\RecordListController` changed their visibility from public
|
||||
to protected and should not be called any longer:
|
||||
|
||||
* :php:`init()`
|
||||
* :php:`menuConfig()`
|
||||
* :php:`clearCache()`
|
||||
* :php:`main()`
|
||||
* :php:`getModuleTemplate()`
|
||||
|
||||
Additionally, the two hooks
|
||||
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawHeaderHook']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawFooterHook']`
|
||||
|
||||
changed their signature:
|
||||
The second argument, an instance of the parent object :php:`RecordListController` will be removed in TYPO3 v10. Use the instance of the PSR-7
|
||||
:php:`ServerRequestInterface` that is provided as array key :php:`request` of the first argument.
|
||||
|
||||
Furthermore, the assignment of an object instance of class :php:`RecordListController` as
|
||||
:php:`GLOBALS['SOBE']` has been marked as deprecated and will not be set anymore in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods or accessing above properties will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances are usually only affected if an extension registers a hook for
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawHeaderHook']` or
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawFooterHook']`. They will
|
||||
work as before in TYPO3 v9, but using a property or calling a method of the provided parent object will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Hooks registered should change their parent object usage and signature. An example can be found in the `sys_notes` extension
|
||||
in class :php:`TYPO3\CMS\SysNote\Hook\RecordListHook`.
|
||||
|
||||
Code before::
|
||||
|
||||
/**
|
||||
* Add sys_notes as additional content to the header of the list module
|
||||
*
|
||||
* @param array $params
|
||||
* @param RecordListController $parentObject
|
||||
* @return string
|
||||
*/
|
||||
public function renderInHeader(array $params = [], RecordListController $parentObject)
|
||||
{
|
||||
$controller = GeneralUtility::makeInstance(NoteController::class);
|
||||
return $controller->listAction($parentObject->id, SysNoteRepository::SYS_NOTE_POSITION_TOP);
|
||||
}
|
||||
|
||||
Adapted hook usage::
|
||||
|
||||
/**
|
||||
* Add sys_notes as additional content to the header of the list module
|
||||
*
|
||||
* @param array $params
|
||||
* @return string
|
||||
*/
|
||||
public function renderInHeader(array $params): string
|
||||
{
|
||||
/** @var ServerRequestInterface $request */
|
||||
$request = $params['request'];
|
||||
$id = (int)($request->getParsedBody()['id'] ?? $request->getQueryParams()['id'] ?? 0);
|
||||
$controller = GeneralUtility::makeInstance(NoteController::class);
|
||||
return $controller->listAction($id, SysNoteRepository::SYS_NOTE_POSITION_TOP);
|
||||
}
|
||||
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:recordlist
|
||||
@@ -0,0 +1,114 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86207:
|
||||
|
||||
====================================================
|
||||
Deprecation: #86207 - Protected tstemplate extension
|
||||
====================================================
|
||||
|
||||
See :issue:`86207`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To allow refactoring of the Web -> Template module in TYPO3 v10, the involved controller classes
|
||||
have been disentangled and better encapsulated:
|
||||
|
||||
* Class :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\BaseScriptClass` anymore
|
||||
* Class :php:`TYPO3\CMS\Tstemplate\Controller\TemplateAnalyzerModuleFunctionController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateConstantEditorModuleFunctionController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
|
||||
Setting an instance of class :php:`TypoScriptTemplateModuleController` as global object :php:`$GLOBALS['SOBE']`
|
||||
has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
The following class properties have been set from public to protected and will not be accessible in TYPO3 v10 anymore:
|
||||
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->textExtensions`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->pageinfo`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->id`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->modTSconfig`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->content`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->extObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->access`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->perms_clause`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->edit`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->modMenu_type`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->MCONF`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->CMD`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController->sObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TemplateAnalyzerModuleFunctionController->pObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TemplateAnalyzerModuleFunctionController->function_key`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TemplateAnalyzerModuleFunctionController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TemplateAnalyzerModuleFunctionController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateConstantEditorModuleFunctionController->pObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateConstantEditorModuleFunctionController->function_key`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateConstantEditorModuleFunctionController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateConstantEditorModuleFunctionController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController->pObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController->function_key`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateInformationModuleFunctionController->tce_processed`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController->pObj`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController->function_key`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController->localLangFile`
|
||||
|
||||
The following class methods have been set from public to protected and will not be accessible in TYPO3 v10 anymore:
|
||||
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->getExternalItemConfig()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->init()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->clearCache()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->main()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->setInPageArray()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->menuConfig()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->mergeExternalItems()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->handleExternalFunctionValue()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->checkExtObj()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->extObjContent()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->getExtObjContent()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->checkSubExtObj()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateModuleController->extObjHeader()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTemplateAnalyzerModuleFunctionControllerinitialize_editor()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTemplateAnalyzerModuleFunctionControllermodMenu()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTemplateAnalyzerModuleFunctionControllerhandleExternalFunctionValue()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateConstantEditorModuleFunctionControllerinitialize_editor()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateConstantEditorModuleFunctionControllerhandleExternalFunctionValue()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateInformationModuleFunctionControllerinitialize_editor()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateInformationModuleFunctionControllertableRowData()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateInformationModuleFunctionControllerhandleExternalFunctionValue()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateObjectBrowserModuleFunctionControllerinitialize_editor()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateObjectBrowserModuleFunctionControllermodMenu()`
|
||||
* :php:`TYPO3CMSTstemplateControllerTypoScriptTemplateObjectBrowserModuleFunctionControllerhandleExternalFunctionValue()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If an extension accesses one of the above protected properties or calls one of the above protected methods,
|
||||
a :php:`E_USER_DEPRECATED` error will be triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
There are not many extensions that extend the `tstemplate` extension with own modules, it is relatively
|
||||
unlikely that instances are affected by this.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If extending the `tstemplate` module with an own extension, the extension should be adapted to not call
|
||||
the above methods or properties any longer. Most usages can be easily adapted, for instance
|
||||
to retrieve the current page id, use :php:`GeneralUtility::_GP('id')` instead of :php:`$this->pObj->id`.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:tstemplate
|
||||
@@ -0,0 +1,116 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86210:
|
||||
|
||||
==============================================
|
||||
Deprecation: #86210 - Protected info extension
|
||||
==============================================
|
||||
|
||||
See :issue:`86210`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To allow refactoring of the Web -> Info module in TYPO3 v10, the involved controller classes
|
||||
have been disentangled and better encapsulated:
|
||||
|
||||
* Class :php:`TYPO3\CMS\Info\Controller\InfoModuleController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\BaseScriptClass` anymore
|
||||
* Class :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Info\Controller\PageInformationController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
* Class :php:`TYPO3\CMS\Info\Controller\TranslationStatusController`
|
||||
does not extend :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule` anymore
|
||||
|
||||
Setting an instance of class :php:`InfoModuleController` as global object :php:`$GLOBALS['SOBE']`
|
||||
has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
The following class properties have been set from public to protected and will not be accessible in TYPO3 v10 anymore:
|
||||
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->perms_clause`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->modTSconfig`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->modMenu_setDefaultList`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->modMenu_dontValidateList`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->modMenu_type`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->extObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->content`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->pObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->id`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->CMD`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->doc`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoModuleController->MCONF`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->pObj`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->doc`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->function_key`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->extClassConf`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->localLangFile`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->extObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->pObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->function_key`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->extObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->pObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->function_key`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->extObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->pObj`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->function_key`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->extClassConf`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->localLangFile`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->extObj`
|
||||
|
||||
The following class methods have been set from public to protected and will not be accessible in TYPO3 v10 anymore:
|
||||
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->main()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->init()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->getModuleTemplate()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->menuConfig()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->handleExternalFunctionValue()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->mergeExternalItems()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->getExternalItemConfig()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->extObjContent()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->getExtObjContent()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->checkExtObj()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->extObjHeader()`
|
||||
* :php:`TYPO3CMSInfoControllerInfoModuleController->checkSubExtObj()`
|
||||
* :php:`TYPO3\CMS\Linkvalidator\Report\LinkValidatorReport->extObjContent()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->modMenu()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\PageInformationController->extObjContent()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->modMenu()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\InfoPageTyposcriptConfigController->extObjContent()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->getContentElementCount()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->getLangStatus()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->renderL10nTable()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->modMenu()`
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->extObjContent()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If an extension accesses one of the above protected properties or calls one of the above protected methods,
|
||||
a :php:`E_USER_DEPRECATED` error will be triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Various extensions extend the Web -> Info module. Those typically call
|
||||
:php:`ExtensionManagementUtility::insertModuleFunction('web_info', ...)` in :file:`ext_tables.php` or
|
||||
:file:`ext_localconf.php`. Those instances may need adaptions.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If extending the `info` module with an own extension, the extension should be adapted to not call
|
||||
the above methods or properties any longer. Most usages can be easily adapted, for instance
|
||||
to retrieve the current page id, use :php:`GeneralUtility::_GP('id')` instead of :php:`$this->pObj->id`.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:info
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86225:
|
||||
|
||||
========================================================================
|
||||
Deprecation: #86225 - Classes BaseScriptClass and AbstractFunctionModule
|
||||
========================================================================
|
||||
|
||||
See :issue:`86225`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The two classes :php:`TYPO3\CMS\Backend\Module\BaseScriptClass`, also known as
|
||||
:php:`t3lib_SCbase` and :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule`,
|
||||
also known as :php:`t3lib_extobjbase` have been marked as deprecated and will be removed
|
||||
in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using one of the classes will trigger a :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The :php:`BaseScriptClass` has been commonly extended by extensions that add own
|
||||
backend modules and did not rely on extbase for that. There is nothing wrong
|
||||
with not using extbase, but most of the methods from :php:`BaseScriptClass`
|
||||
were unused by own extensions and hard to understand, too.
|
||||
|
||||
Class :php:`AbstractFunctionModule` has been extended by some extensions that
|
||||
add own sub modules to the Page -> Info or the Page -> Template view.
|
||||
|
||||
The extension scanner will find possible usages.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
A migration is often relatively simple: Extensions that extend :php:`BaseScriptClass`
|
||||
should verify which methods and properties are actually used from the parent class. The
|
||||
most simple solution is to just copy those over to the own class and remove the
|
||||
inheritance. It is good practice to at least change their visibility from :php:`public`
|
||||
to :php:`protected` at the same time if possible.
|
||||
|
||||
Extensions that extend :php:`AbstractFunctionModule` should do the same. The main `info`
|
||||
and `tstemplate` controllers typically only call the methods :php:`init()` and :php:`main()`
|
||||
of those classes as entry points, those need to be kept public.
|
||||
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,51 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86270:
|
||||
|
||||
==============================================================================
|
||||
Deprecation: #86270 - config.tx_extbase.objects and plugin.tx_%plugin%.objects
|
||||
==============================================================================
|
||||
|
||||
See :issue:`86270`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :typoscript:`config.tx_extbase.objects` and :typoscript:`plugin.tx_%plugin%.objects` configuration options
|
||||
have been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Configuring class overrides using :typoscript:`config.tx_extbase.objects` or :typoscript:`plugin.tx_%plugin%.objects`
|
||||
will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations that make use of the TypoScript :typoscript:`config.tx_extbase.objects` or :typoscript:`plugin.tx_%plugin%.objects`
|
||||
configuration options are affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use XCLASSes configured in :file:`ext_localconf.php` using
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']`.
|
||||
|
||||
Register implementations in the Extbase object container instead if you need to override classes
|
||||
that are processed by the :php:`PropertyMapper` like domain models or if you rely on additional
|
||||
injections:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
|
||||
->registerImplementation(Base::class, Override::class);
|
||||
|
||||
If you conditionally configured :typoscript:`config.tx_extbase.objects` or
|
||||
:typoscript:`plugin.tx_%plugin%.objects`, then move that conditional logic into the
|
||||
overriding class itself.
|
||||
|
||||
.. index:: TypoScript, NotScanned, ext:extbase
|
||||
@@ -0,0 +1,65 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86279:
|
||||
|
||||
==========================================================
|
||||
Deprecation: #86279 - Various Hooks and PSR-15 Middlewares
|
||||
==========================================================
|
||||
|
||||
See :issue:`86279`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new PSR-15-based middleware concept allows for a more fine-grained "hooking" mechanism when enhancing the HTTP
|
||||
Request or Response object.
|
||||
|
||||
The following hooks have therefore been marked as deprecated:
|
||||
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['tslib_fe-PostProc']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['connectToDB']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['initFEuser']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkDataSubmission']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/index_ts.php']['preBeUser']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/index_ts.php']['postBeUser']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkAlternativeIdMethods-PostProc']`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/index_ts.php']['preprocessRequest']`
|
||||
|
||||
On top, some middlewares have only been introduced in order to execute these hooks, or due to, and are marked for
|
||||
internal use:
|
||||
|
||||
* :file:`typo3/cms-core/normalized-params-attribute`
|
||||
* :file:`typo3/cms-backend/legacy-document-template`
|
||||
* :file:`typo3/cms-backend/output-compression`
|
||||
* :file:`typo3/cms-backend/response-headers`
|
||||
* :file:`typo3/cms-frontend/timetracker`
|
||||
* :file:`typo3/cms-frontend/preprocessing`
|
||||
* :file:`typo3/cms-frontend/eid`
|
||||
* :file:`typo3/cms-frontend/content-length-headers`
|
||||
* :file:`typo3/cms-frontend/tsfe`
|
||||
* :file:`typo3/cms-frontend/output-compression`
|
||||
* :file:`typo3/cms-frontend/prepare-tsfe-rendering`
|
||||
* :file:`typo3/cms-frontend/shortcut-and-mountpoint-redirect`
|
||||
|
||||
As these middlewares are marked as internal, it is recommended not to reference them directly, as these might get removed
|
||||
in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Making use of one of the hooks in an extension will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 instances with extensions using any of the hooks.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use a custom PSR-15 middleware instead.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:frontend
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86288:
|
||||
|
||||
===============================================================
|
||||
Deprecation: #86288 - FrontendBackendUserAuthentication methods
|
||||
===============================================================
|
||||
|
||||
See :issue:`86288`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Due to refactorings within AdminPanel, EXT:feedit and via PSR-15 middlewares, the extension class
|
||||
:php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication`, which is instantiated in Frontend
|
||||
Requests as :php:`$GLOBALS['BE_USER']` has some unused methods which have been marked as deprecated:
|
||||
|
||||
* :php:`checkBackendAccessSettingsFromInitPhp()`
|
||||
* :php:`extPageReadAccess()`
|
||||
* :php:`extGetTreeList()`
|
||||
* :php:`extGetLL()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods above will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with custom PHP code accessing any of the methods above.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use either methods from :php:`BackendUserAuthentication` directly, or - if in context of Admin Panel or
|
||||
Frontend Editing - use the API methods within these modules directly, if necessary.
|
||||
|
||||
.. index:: PHP-API, Frontend, Backend, FullyScanned
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86320:
|
||||
|
||||
=================================================================
|
||||
Deprecation: #86320 - Mark internal $TSFE properties as protected
|
||||
=================================================================
|
||||
|
||||
See :issue:`86320`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties of class :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController` have changed their visibility to be protected from public and should not be called any longer.
|
||||
The properties are only used and needed internally.
|
||||
|
||||
* :php:`loginAllowedInBranch_mode`
|
||||
* :php:`cacheTimeOutDefault`
|
||||
* :php:`cacheContentFlag`
|
||||
* :php:`cacheExpires`
|
||||
* :php:`isClientCachable`
|
||||
* :php:`no_cacheBeforePageGen`
|
||||
* :php:`tempContent`
|
||||
* :php:`pagesTSconfig`
|
||||
* :php:`uniqueCounter`
|
||||
* :php:`uniqueString`
|
||||
* :php:`lang`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the properties will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation directly accessing any of the mentioned properties.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Properties are only for internal use, no migration available.
|
||||
|
||||
.. index:: Frontend, FullyScanned, ext:frontend
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86323:
|
||||
|
||||
=========================================================================
|
||||
Deprecation: #86323 - Configuration key "site" in YAML site configuration
|
||||
=========================================================================
|
||||
|
||||
See :issue:`86323`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The site configuration is a file called :file:`config` in a folder called :file:`sites` and does not need a ``site`` key
|
||||
to identify its purpose. To keep writing the config as easy as possible, the site configuration moved one level up and
|
||||
now resides directly in :file:`config.yaml`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Having the site configuration below the key "site" has been marked as deprecated and will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Installations with a site config that have a key "site" are affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Remove the "site" key and first level indentation either by directly editing the YAML file or by saving via the sites module.
|
||||
|
||||
.. index:: Backend, NotScanned, ext:core
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86338:
|
||||
|
||||
===============================================================
|
||||
Deprecation: #86338 - Change visibility of PageRepository->init
|
||||
===============================================================
|
||||
|
||||
See :issue:`86338`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TYPO3\CMS\Frontend\Page\PageRepository::init()` is now called implicitly within the constructor.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with extensions directly calling :php:`TYPO3\CMS\Frontend\Page\PageRepository::init()`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Remove the method call. The constructor is taking care of calling the method.
|
||||
|
||||
.. index:: ext:frontend, NotScanned
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86353:
|
||||
|
||||
=============================================================
|
||||
Deprecation: #86353 - CacheManager usage in ext_localconf.php
|
||||
=============================================================
|
||||
|
||||
See :issue:`86353`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Usage of :php:`\TYPO3\CMS\Core\Cache\CacheManager->getCache()` during
|
||||
:file:`ext_localconf.php` loading phase has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :php:`\TYPO3\CMS\Core\Cache\CacheManager->getCache()` in
|
||||
:file:`ext_localconf.php` will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations with third party extensions that use
|
||||
:php:`\TYPO3\CMS\Core\Cache\CacheManager->getCache()` in
|
||||
:file:`ext_localconf.php`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Load caches on demand, when actually needed.
|
||||
|
||||
.. index:: PHP-API, NotScanned
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86366:
|
||||
|
||||
===============================================
|
||||
Deprecation: #86366 - Methods in AbstractUpdate
|
||||
===============================================
|
||||
|
||||
See :issue:`86366`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To ease the update pain a compatibility layer for AbstractUpdate based
|
||||
upgrade wizards has been implemented, that allows running "old" wizards
|
||||
on CLI (enabling extension authors to support both TYPO3 v8 and TYPO3 v9 with one
|
||||
wizard).
|
||||
|
||||
The following methods of class :php:`TYPO3\CMS\Install\Updates\AbstractUpdate` have been marked as deprecated and will be removed with TYPO3 v10:
|
||||
|
||||
* [not scanned] :php:`getTitle()`
|
||||
* [not scanned] :php:`setTitle()`
|
||||
* [not scanned] :php:`getIdentifier()`
|
||||
* [not scanned] :php:`setIdentifier()`
|
||||
* [not scanned] :php:`getDescription()`
|
||||
* :php:`executeUpdate()`
|
||||
* :php:`updateNecessary()`
|
||||
* :php:`getPrerequisites()`
|
||||
* :php:`setOutput()`
|
||||
* :php:`shouldRenderWizard()`
|
||||
* :php:`checkIfTableExists()`
|
||||
* :php:`installExtensions()`
|
||||
* :php:`markWizardAsDone()`
|
||||
* :php:`isWizardDone()`
|
||||
|
||||
The class itself has also been marked as deprecated, construction will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the mentioned methods through an extended class will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
All UpdateWizards extending AbstractUpdate gained cli capability since :issue:`86076`.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Each instance with custom update wizards that extend AbstractUpdate.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the interfaces instead the abstract class to define the capabilities of the Upgrade Wizard class.
|
||||
See https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.4/Feature-86076-NewAPIForUpgradeWizards.html.
|
||||
|
||||
.. index:: Backend, CLI, PHP-API, PartiallyScanned, ext:install
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86389:
|
||||
|
||||
==============================================================================
|
||||
Deprecation: #86389 - GeneralUtility::_GETset() and TSFE->mergingWithGetVars()
|
||||
==============================================================================
|
||||
|
||||
See :issue:`86389`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Two methods related to setting global :php:`$_GET` parameters have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Core\Utility\GeneralUtility::_GETset()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->mergingWithGetVars()`
|
||||
|
||||
The two methods are wrappers to set the :php:`$_GET` properties, however, this concept has been superseded
|
||||
by using the PSR-7 request object within PSR-15 middlewares to replace the variables.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the two methods within PHP will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any installation making use of these methods within a TYPO3 extension, e.g. RealURL.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Implement a custom PSR-15 middleware to update the PSR-7 request object, and to manually set :php:`$_GET` on top,
|
||||
as long as TYPO3 still supports :php:`GeneralUtility::_GP()`, although these methods will vanish in the near future.
|
||||
|
||||
Relying on the request object, and using PSR-15 middlewares to manipulate request parameters is more future-proof
|
||||
for extensions and TYPO3 sites.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86404:
|
||||
|
||||
==================================================
|
||||
Deprecation: #86404 - $GLOBALS['TYPO3_LOADED_EXT']
|
||||
==================================================
|
||||
|
||||
See :issue:`86404`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The global :php:`$GLOBALS['TYPO3_LOADED_EXT']` has been marked as deprecated in favor
|
||||
of the :php:`PackageManager` API.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing :php:`$GLOBALS['TYPO3_LOADED_EXT']` is discouraged.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions using :php:`$GLOBALS['TYPO3_LOADED_EXT']`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the :php:`getActivePackages()` method of
|
||||
:php:`\TYPO3\CMS\Core\Package\PackageManager` to get a list of active
|
||||
packages.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86406:
|
||||
|
||||
==========================================================================
|
||||
Deprecation: #86406 - TCA type group internal_type file and file_reference
|
||||
==========================================================================
|
||||
|
||||
See :issue:`86406`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`TCA` property values :php:`internal_type="file"` and :php:`internal_type="file_reference"`
|
||||
for columns config :php:`type="group"` have been marked as deprecated.
|
||||
|
||||
A series of related methods have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\DataHandler->checkValue_group_select_file()`
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\DataHandler->copyRecord_procFilesRefs()`
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\DataHandler->extFileFields()`
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\DataHandler->extFileFunctions()`
|
||||
* :php:`TYPO3\CMS\Core\Database\ReferenceIndex->getRelations_procFiles()`
|
||||
* :php:`TYPO3\CMS\Core\Integrity\DatabaseIntegrityCheck->getFileFields()`
|
||||
|
||||
Some constants have bee marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\TableColumnSubType::FILE`
|
||||
* :php:`TYPO3\CMS\Core\DataHandling\TableColumnSubType::FILE_REFERENCE`
|
||||
|
||||
The "internal_type" functionality has been superseded by the File Abstraction Layer (FAL) since TYPO3 6.0
|
||||
and has several drawbacks within TYPO3 (e.g. multiple copies of files based on a file name, no flexibility
|
||||
for moving data to a different storage, no metadata functionality, no cropping functionality).
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The Backend module "Upgrade" > "Check TCA migrations" shows them as deprecated, and triggers a
|
||||
:php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Using the TCA property values mentioned above will trigger a PHP :php:`E_USER_DEPRECATED` error when the cache is cleared.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Installations still using the methods or constants, or TYPO3 installations with extensions registering custom
|
||||
TCA fields with the mentioned TCA properties.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
It is rather unlikely instances use one of the above methods or constants. The extension scanner will find possible
|
||||
usages, though.
|
||||
|
||||
It's more likely that extensions use :php:`type=group` with :php:`internal_type=file` or
|
||||
:php:`internal_type=file_reference`. Those should switch to use FAL references based on
|
||||
:php:`type=inline` instead.
|
||||
|
||||
The core code changed one last :php:`internal_type=file` usage in TYPO3 v9 and moved it to FAL. Several use-cases
|
||||
within the last TYPO3 major versions show how to migrate a legacy file field to FAL (e.g. "fe_users.image"
|
||||
or "tt_content.image" including automatic upgrade wizards for the database - an example of the last migration can be
|
||||
found online_. These previous changes give some insight on how a file relation could be changed to FAL and comes
|
||||
with an upgrade wizard that can be a helpful example if existing extension data needs to be migrated.
|
||||
|
||||
.. _online: https://review.typo3.org/#/c/54830/
|
||||
|
||||
.. index:: Backend, PHP-API, TCA, PartiallyScanned
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86411:
|
||||
|
||||
===========================================
|
||||
Deprecation: #86411 - TSFE->makeCacheHash()
|
||||
===========================================
|
||||
|
||||
See :issue:`86411`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->makeCacheHash()`
|
||||
which acts for validating the `&cHash` GET parameter against other given GET parameters
|
||||
has been marked as deprecated, as this functionality has been moved into a PSR-15 middleware.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions calling the PHP method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Ensure to use the PSR-15 middleware stack with the PageArgumentValidator in use to verify a
|
||||
given cHash signature against given query parameters.
|
||||
|
||||
.. index:: Frontend, FullyScanned
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86433:
|
||||
|
||||
=========================================================================================
|
||||
Deprecation: #86433 - Various stdWrap functions and ContentObjectRenderer-related methods
|
||||
=========================================================================================
|
||||
|
||||
See :issue:`86433`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following TypoScript :typoscript:`stdWrap` sub-properties and functions have been marked as deprecated:
|
||||
|
||||
* :typoscript:`stdWrap.addParams`
|
||||
* :typoscript:`stdWrap.filelist`
|
||||
* :typoscript:`stdWrap.filelink`
|
||||
|
||||
In conjunction with the properties, the following methods of class :php:`TYPO3\CMS\Frontend\ContentObjectRenderer` have been marked as deprecated:
|
||||
|
||||
* :php:`stdWrap_addParams()`
|
||||
* :php:`stdWrap_filelink()`
|
||||
* :php:`stdWrap_filelist()`
|
||||
* :php:`addParams()`
|
||||
* :php:`filelink()`
|
||||
* :php:`filelist()`
|
||||
* :php:`typolinkWrap()`
|
||||
* :php:`currentPageUrl()`
|
||||
|
||||
These functions were part of TYPO3 Core due to legacy functionality related
|
||||
to ContentObject "TABLE" and "CSS Styled Content".
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods or using the properties will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom TypoScript options which have not been migrated to FAL
|
||||
or Fluid Styled Content.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use Fluid Styled Content, or DataProcessors instead.
|
||||
|
||||
.. index:: Frontend, TypoScript, FullyScanned
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86438:
|
||||
|
||||
================================================
|
||||
Deprecation: #86438 - PageRenderer->loadJQuery()
|
||||
================================================
|
||||
|
||||
See :issue:`86438`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method
|
||||
:php:`TYPO3\CMS\Core\Page\PageRenderer->loadJQuery()`
|
||||
and the constants
|
||||
:php:`TYPO3\CMS\Core\Page\PageRenderer::JQUERY_VERSION_LATEST` and
|
||||
:php:`TYPO3\CMS\Core\Page\PageRenderer::JQUERY_NAMESPACE_NONE` have been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling this method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom or third party extensions, which use the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use a package manager for frontend or custom jQuery files instead.
|
||||
|
||||
.. index:: Backend, Frontend, PHP-API, FullyScanned
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86439:
|
||||
|
||||
=============================================================================
|
||||
Deprecation: #86439 - Mark several methods within TemplateService as internal
|
||||
=============================================================================
|
||||
|
||||
See :issue:`86439`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods in :php:`TYPO3\CMS\Core\TypoScript\TemplateService` have been marked as protected:
|
||||
|
||||
* :php:`prependStaticExtra()`
|
||||
* :php:`versionOL()`
|
||||
* :php:`processIncludes()`
|
||||
* :php:`mergeConstantsFromPageTSconfig()`
|
||||
* :php:`flattenSetup()`
|
||||
* :php:`substituteConstants()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the methods in a public context will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions working with the :php:`TemplateService` class.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Avoid using the methods, and re-implement the functionality on your own, if necessary.
|
||||
|
||||
.. index:: Backend, FullyScanned, ext:core
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86440:
|
||||
|
||||
==========================================================================
|
||||
Deprecation: #86440 - Internal Methods and properties within RteHtmlParser
|
||||
==========================================================================
|
||||
|
||||
See :issue:`86440`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Several methods and properties in class :php:`TYPO3\CMS\Core\Html\RteHtmlParser` have changed visibility
|
||||
from public to protected.
|
||||
Some additional functionality has been marked as deprecated, as this has been replaced with the new RTE configuration
|
||||
since TYPO3 v8.
|
||||
|
||||
The following properties have changed visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`blockElementList`
|
||||
* :php:`recPid`
|
||||
* :php:`elRef`
|
||||
* :php:`tsConfig`
|
||||
* :php:`procOptions`
|
||||
* :php:`TS_transform_db_safecounter`
|
||||
* :php:`getKeepTags_cache`
|
||||
* :php:`allowedClasses`
|
||||
|
||||
The following methods have changed visibility from public to protected and should not be called any longer:
|
||||
|
||||
* :php:`TS_images_db()`
|
||||
* :php:`TS_links_db()`
|
||||
* :php:`TS_transform_db()`
|
||||
* :php:`TS_transform_rte()`
|
||||
* :php:`HTMLcleaner_db()`
|
||||
* :php:`getKeepTags()`
|
||||
* :php:`divideIntoLines()`
|
||||
* :php:`setDivTags()`
|
||||
* :php:`getWHFromAttribs()`
|
||||
* :php:`urlInfoForLinkTags()` (deprecated, not in use anymore)
|
||||
* :php:`TS_AtagToAbs()`
|
||||
|
||||
The following processing options (`RTE.proc.`) have been marked as deprecated:
|
||||
|
||||
* :typoscript:`keepPDIVattribs`
|
||||
* :typoscript:`dontRemoveUnknownTags_db`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Setting any of the options, calling the methods above or accessing the properties will trigger a
|
||||
PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions or custom usages for RTE handling (e.g. `l10nmgr`).
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to use the public API only and use other options (such as :typoscript:`allowAttributes` instead of
|
||||
:typoscript:`dontRemoveUnknownTags_db`) in order to only run certain instructions on the RteHtmlParser object.
|
||||
|
||||
.. index:: RTE, FullyScanned, PHP-API
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86441:
|
||||
|
||||
=====================================================================================
|
||||
Deprecation: #86441 - Various methods and properties inside BackendUserAuthentication
|
||||
=====================================================================================
|
||||
|
||||
See :issue:`86441`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Some minor changes have been made with :php:`TYPO3\CMS\Core\Authentication\BackendUserAuthentication` in order
|
||||
to continue cleaning up the code.
|
||||
|
||||
The property :php:`checkWorkspaceCurrent_cache` has been marked as protected, as it is an internal cache.
|
||||
|
||||
The second argument of method :php:`modAccess()` has been marked as deprecated, as the method should not trigger runtime exceptions anymore.
|
||||
|
||||
The method :php:`isPSet()` has been marked as deprecated.
|
||||
|
||||
The following - mostly workspaces-related - methods have been marked as "internal":
|
||||
|
||||
* :php:`workspaceCannotEditOfflineVersion()`
|
||||
* :php:`workspacePublishAccess()`
|
||||
* :php:`workspaceSwapAccess()`
|
||||
* :php:`workspaceCannotEditOfflineVersion()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the deprecated method or the protected property will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with enhanced workspace or permission functionality.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Avoid using the methods, and re-implement the functionality on your own, if necessary.
|
||||
|
||||
.. index:: Frontend, FullyScanned, PHP-API
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86461:
|
||||
|
||||
===============================================================================
|
||||
Deprecation: #86461 - Mark various TypoScript parsing functionality as internal
|
||||
===============================================================================
|
||||
|
||||
See :issue:`86461`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties and methods of class :php:`TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser`
|
||||
have changed visibility from public to protected as they are used for internal purpose:
|
||||
|
||||
* :php:`raw`
|
||||
* :php:`rawP`
|
||||
* :php:`lastComment`
|
||||
* :php:`commentSet`
|
||||
* :php:`multiLineEnabled`
|
||||
* :php:`multiLineObject`
|
||||
* :php:`multiLineValue`
|
||||
* :php:`inBrace`
|
||||
* :php:`lastConditionTrue`
|
||||
* :php:`syntaxHighLight`
|
||||
* :php:`highLightData`
|
||||
* :php:`highLightData_bracelevel`
|
||||
* :php:`highLightStyles`
|
||||
* :php:`highLightBlockStyles`
|
||||
* :php:`highLightBlockStyles_basecolor`
|
||||
* :php:`nextDivider()`
|
||||
* :php:`parseSub()`
|
||||
* :php:`rollParseSub()`
|
||||
* :php:`setVal()`
|
||||
* :php:`error()`
|
||||
* :php:`regHighLight()`
|
||||
* :php:`syntaxHighlight_print()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods or accessing any of the properties will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom TypoScript Parsers or extensions which make use of internal
|
||||
TypoScript parsings.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Ensure to only use public entry-points of the TypoScript parsers.
|
||||
|
||||
.. index:: TypoScript, FullyScanned, PHP-API
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86466:
|
||||
|
||||
=================================================================
|
||||
Deprecation: #86466 - AbstractUserAuthentication->fetchUserRecord
|
||||
=================================================================
|
||||
|
||||
See :issue:`86466`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`TYPO3\CMS\Core\Authentication\AbstractUserAuthentication->fetchUserRecord()`
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The methods has been called indirectly via
|
||||
:php:`TYPO3\CMS\Core\Authentication\AbstractAuthenticationService->fetchUserRecord()` as
|
||||
:php:`$this->pObj->fetchUserRecord()`. It has usually not been called directly through
|
||||
custom authentication services. Instances are usually not affected by the change, the
|
||||
extension scanner will find possible usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If used within authentication services, use :php:`$this->fetchUserRecord()` instead, otherwise
|
||||
copy the method around.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86486:
|
||||
|
||||
===================================================================
|
||||
Deprecation: #86486 - TypoScriptFrontendController->processOutput()
|
||||
===================================================================
|
||||
|
||||
See :issue:`86486`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TypoScriptFrontendController->processOutput()` has been
|
||||
marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling this method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions that use the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use :php:`TypoScriptFrontendController->applyHttpHeadersToResponse()` and
|
||||
:php:`TypoScriptFrontendController->processContentForOutput()` instead, if necessary.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-20051:
|
||||
|
||||
=============================================
|
||||
Feature: #20051 - Support the "canonical" tag
|
||||
=============================================
|
||||
|
||||
See :issue:`20051`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 will finally provide built-in support for the :html:`<link rel="canonical" href="">` tag.
|
||||
|
||||
If the core extension "seo" is installed, it will automatically add the canonical link to the page.
|
||||
|
||||
The canonical link is basically the same absolute link as the link to the current hreflang and is meant
|
||||
to indicate where the original source of the content is. It is a tool to prevent duplicate content
|
||||
penalties.
|
||||
|
||||
In the page properties, the canonical link can be overwritten per language. The link wizard offers all
|
||||
possibilities including external links and link handler configurations.
|
||||
|
||||
Should an empty href occur when generating the link to overwrite the canonical (this happens e.g. if the
|
||||
selected page is not available in the current language), the fallback to the current hreflang will be activated
|
||||
automatically. This ensures that there is no empty canonical.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If you have other SEO extensions installed that generate canonical links, you have to make sure only one creates it.
|
||||
If both core and an extension are generating a canonical link, it will
|
||||
result in 2 canonical links which might cause confusion for search engines.
|
||||
|
||||
.. index:: Backend, Database, Frontend, TCA, ext:seo
|
||||
@@ -0,0 +1,63 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-80398:
|
||||
|
||||
===============================================================
|
||||
Feature: #80398 - utf8mb4 on mysql by default for new instances
|
||||
===============================================================
|
||||
|
||||
See :issue:`80398`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
New instances created by the TYPO3 installer now set `utf8mb4` as charset and `utf8mb4_unicode_ci`
|
||||
collation by default for instances running on MySQL. This allows 4 byte unicode characters
|
||||
like emojis in MySQL.
|
||||
|
||||
If upgrading instances, admins may change :file:`LocalConfiguration.php` to use this feature.
|
||||
The core does not provide mechanisms to update the collation of existing tables
|
||||
from `utf8_unicode_ci` to `utf8mb4_unicode_ci` for existing instances, though. Admins need
|
||||
to manage that on their own if needed, the reports module shows an information if the
|
||||
table schema uses mixed collations. This should be fixed after manually configuring
|
||||
`utf8mb4` to avoid SQL errors when joining tables having different collations.
|
||||
|
||||
Also note that manually upgrading to `utf8mb4` may lead to index length issues: The maximum key
|
||||
length on InnoDB tables is often 767 bytes and options to increase that have even been actively
|
||||
removed, for instance in recent MariaDB versions.
|
||||
A typical case is an index on a varchar(255) field: The DBMS assumes the worst case for the index
|
||||
length, which is 3 bytes per character for a utf8 (utf8mb3), but 4 bytes for utf8mb4: With utf8,
|
||||
the maximum index length is 3*255 + 1 = 766 bytes which fits into 767, but with utf8mb4, this
|
||||
is 4*255 + 1 = 1021 bytes, which exceeds the maximum length and leads to SQL errors when setting
|
||||
such an index.
|
||||
This scenario gets more complex with combined indices and may need manual investigation when
|
||||
upgrading an existing instance from `utf8` to `utf8mb4`. One solution is to restrict the
|
||||
index length in ext_tables.sql of the affected extension: :php:`KEY myKey (myField(191))`, which
|
||||
in this case leads to 4*191 + 1 = 764 bytes as maximum used length.
|
||||
|
||||
The basic settings to use `utf8mb4` in :file:`LocalConfiguration.php` are:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'DB' => [
|
||||
'Connections' => [
|
||||
'Default' => [
|
||||
'driver' => 'mysqli',
|
||||
...
|
||||
'charset' => 'utf8mb4',
|
||||
'tableoptions' => [
|
||||
'charset' => 'utf8mb4',
|
||||
'collate' => 'utf8mb4_unicode_ci',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
`utf8mb4` is an allowed charset and `utf8mb4_unicode_ci` is an allowed collation and
|
||||
used by default for new instances running on MySQL.
|
||||
|
||||
.. index:: PHP-API, LocalConfiguration, Database
|
||||
@@ -0,0 +1,83 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86160:
|
||||
|
||||
==============================================================
|
||||
Feature: #86160 - PageTypeEnhancer for mapping &type parameter
|
||||
==============================================================
|
||||
|
||||
See :issue:`86160`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new Route Enhancer is added to the newly introduced Routing functionality which allows to add
|
||||
a suffix to the existing route (including existing other enhancers) to map a page type (GET parameter &type=)
|
||||
to a suffix.
|
||||
|
||||
It is now possible to map various page types to endings.
|
||||
|
||||
Example TypoScript:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
page = PAGE
|
||||
page.typeNum = 0
|
||||
page.10 = TEXT
|
||||
page.10.value = Default page
|
||||
|
||||
rssfeed = PAGE
|
||||
rssfeed.typeNum = 13
|
||||
rssfeed.10 < plugin.tx_myplugin
|
||||
rssfeed.config.disableAllHeaderCode = 1
|
||||
rssfeed.config.additionalHeaders.10.header = Content-Type: xml/rss
|
||||
|
||||
jsonview = PAGE
|
||||
jsonview.typeNum = 26
|
||||
jsonview.config.disableAllHeaderCode = 1
|
||||
jsonview.config.additionalHeaders.10.header = Content-Type: application/json
|
||||
jsonview.10 = USER
|
||||
jsonview.10.userFunc = MyVendor\MyExtension\Controller\JsonPageController->renderAction
|
||||
|
||||
Now configure the Route Enhancer in your site's :file:`config.yaml` file like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
PageTypeSuffix:
|
||||
type: PageType
|
||||
default: ''
|
||||
map:
|
||||
'rss.feed': 13
|
||||
'.json': 26
|
||||
|
||||
|
||||
The :yaml:`map` allows to add a filename or a file ending and map this to a :typoscript:`page.typeNum` value.
|
||||
|
||||
It is also possible to set :yaml:`default` to e.g. ".html" to add a ".html" suffix to all default pages.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
PageTypeSuffix:
|
||||
type: PageType
|
||||
default: '.json'
|
||||
index: 'index'
|
||||
map:
|
||||
'rss.feed': 13
|
||||
'.json': 26
|
||||
|
||||
The :yaml:`index` property is used when generating links on root-level page, thus, instead of e.g. having
|
||||
`/en/.json` thus would then result in `/en/index.json`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The TYPO3 Frontend-internal `&type` parameter can now also be part of a human readable URL with a simple
|
||||
line of configuration.
|
||||
|
||||
Please note that the implementation is a Decorator Enhancer, which means that the PageTypeEnhancer
|
||||
is only there for adding suffixes to an existing route / variant, but not to substitute something
|
||||
within the middle of a human readable URL segment.
|
||||
|
||||
.. index:: Frontend
|
||||
@@ -0,0 +1,80 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86214:
|
||||
|
||||
=========================================
|
||||
Feature: #86214 - Implement static routes
|
||||
=========================================
|
||||
|
||||
See :issue:`86214`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The site configuration module now has configuration options to add static routes on a per site basis.
|
||||
Take the following example: In a multi-site installation you want to have different :file:`robots.txt` files for each site that
|
||||
should be reachable at ``/robots.txt`` on each site. You can now add a static route "robots.txt" to your site and
|
||||
define which content should be delivered.
|
||||
|
||||
The TYPO3 SEO extension provides a sitemap for TYPO3 out of the box, but it's only reachable at a specific page type.
|
||||
To enable easier access you can now configure a static route :file:`sitemap.xml` that maps to that page type (see example
|
||||
below).
|
||||
|
||||
Routes can be configured as toplevel files (as in the :file:`sitemap.xml` and :file:`robots.txt` case) but may also be configured
|
||||
to deeper route paths (`my/deep/path/to/a/static/text` for example). Matching is done on the full path but without any
|
||||
parameters.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Static routes can be configured via the user interface or directly in the yaml configuration.
|
||||
There are two options: deliver static text or resolve a TYPO3 URL.
|
||||
|
||||
StaticText
|
||||
----------
|
||||
|
||||
The :yaml:`staticText` option allows to deliver simple text content. The text can be added through a text field directly in
|
||||
the site configuration. This is suitable for files like :file:`robots.txt` or :file:`humans.txt`.
|
||||
|
||||
YAML Configuration Example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
route: robots.txt
|
||||
type: staticText
|
||||
content: |
|
||||
Sitemap: https://example.com/sitemap.xml
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /forbidden/
|
||||
|
||||
TYPO3 URL (t3://)
|
||||
-----------------
|
||||
|
||||
The type :yaml:`uri` for TYPO3 URL provides the option to render either a file, page or url. Internally a request to the
|
||||
file or URL is done and its content delivered.
|
||||
|
||||
YAML Configuration Examples:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
-
|
||||
route: sitemap.xml
|
||||
type: uri
|
||||
source: 't3://page?uid=1&type=1533906435'
|
||||
-
|
||||
route: favicon.ico
|
||||
type: uri
|
||||
source: 't3://file?uid=77'
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Static route resolving is implemented as a PSR-15 middleware. If the route path requested matches any one of the
|
||||
configured site routes, a response is directly generated and returned. This way there is minimal bootstrap code to
|
||||
be executed on a static route resolving request, mainly the site configuration needs to be loaded. Static routes cannot
|
||||
get parameters as the matching is done solely on the path level.
|
||||
|
||||
|
||||
.. index:: Frontend, ext:frontend
|
||||
@@ -0,0 +1,90 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86303:
|
||||
|
||||
==========================================
|
||||
Feature: #86303 - Variants for site's base
|
||||
==========================================
|
||||
|
||||
See :issue:`86303`
|
||||
See :issue:`87831`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The site configuration allows to specify variants of the site's base.
|
||||
Take the following example: The base of a site is set to `https://www.domain.tld` but the staging environment uses
|
||||
`https://staging.domain.tld` and the local development uses `https://www.domain.local`.
|
||||
|
||||
The expression language feature is used to define which variant is taken into account.
|
||||
|
||||
Update since TYPO3 9.5.5:
|
||||
|
||||
This is also possible for site languages (however only via editing the respective `config.yaml` file
|
||||
manually, not via the TYPO3 Backend yet). See example yaml file below.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The base of a site can be changed depending on a condition. Typical examples are:
|
||||
|
||||
- :typoscript:`applicationContext == "Production"`: Check the application context
|
||||
- :typoscript:`getenv("mycontext") == "production`: Check a custom environment variable
|
||||
|
||||
|
||||
This is an example where the default site has base variants, but also a translation (in this case German)
|
||||
has a custom domain or sub-domain instead of a first part of the path segment of the URL.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
rootPageId: 1
|
||||
base: 'https://www.example.com/'
|
||||
baseVariants:
|
||||
-
|
||||
base: 'https://example.local/'
|
||||
condition: 'applicationContext == "Development"'
|
||||
-
|
||||
base: 'https://staging.example.com/'
|
||||
condition: 'applicationContext == "Production/Sydney"'
|
||||
-
|
||||
base: 'https://testing.example.com/'
|
||||
condition: 'applicationContext == "Testing/Paris"'
|
||||
languages:
|
||||
-
|
||||
title: 'Global'
|
||||
enabled: true
|
||||
languageId: '0'
|
||||
base: /
|
||||
typo3Language: default
|
||||
locale: en_UK.UTF-8
|
||||
iso-639-1: en
|
||||
navigationTitle: English
|
||||
hreflang: gb-en
|
||||
direction: ''
|
||||
flag: gb
|
||||
-
|
||||
title: 'DE'
|
||||
enabled: true
|
||||
languageId: '1'
|
||||
base: https://example.de/'
|
||||
baseVariants:
|
||||
-
|
||||
base: 'https://de.example.local/'
|
||||
condition: 'applicationContext == "Development"'
|
||||
-
|
||||
base: 'https://staging.example.de/'
|
||||
condition: 'applicationContext == "Production/Sydney"'
|
||||
-
|
||||
base: 'https://testing.example.de/'
|
||||
condition: 'applicationContext == "Testing/Paris"'
|
||||
typo3Language: de
|
||||
locale: de_DE.UTF-8
|
||||
iso-639-1: de
|
||||
navigationTitle: Deutsch
|
||||
hreflang: de-de
|
||||
direction: ''
|
||||
fallbackType: strict
|
||||
flag: de
|
||||
|
||||
.. index:: Backend, Frontend, TypoScript, ext:core
|
||||
@@ -0,0 +1,484 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86365:
|
||||
|
||||
===============================================
|
||||
Feature: #86365 - Routing Enhancers and Aspects
|
||||
===============================================
|
||||
|
||||
See :issue:`86365`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Page-based routing is now flexible by adding enhancers to routes that are generated or resolved with parameters, which
|
||||
were previously appended as GET parameters.
|
||||
|
||||
An enhancer creates variants of a specific page-base route for a specific purpose (e.g. one plugin, one Extbase plugin)
|
||||
and enhances the existing route path which can contain flexible values, so-called "placeholders".
|
||||
|
||||
On top, aspects can be registered to a specific enhancer to modify a specific placeholder, like static human readable names
|
||||
within the route path, or dynamically generated.
|
||||
|
||||
To give you an overview of what the distinction is, we take a regular page which is available at
|
||||
|
||||
`https://www.example.com/path-to/my-page`
|
||||
|
||||
to access the Page with ID 13.
|
||||
|
||||
Enhancers are ways to extend this route with placeholders on top of this specific route to a page.
|
||||
|
||||
`https://www.example.com/path-to/my-page/products/{product-name}`
|
||||
|
||||
The suffix `/products/{product-name}` to the base route of the page is added by an enhancer. The placeholder variable
|
||||
which is added by the curly braces can then be statically or dynamically resolved or built by an Aspect or more
|
||||
commonly known a Mapper.
|
||||
|
||||
Enhancers and aspects are activated and configured in a site configuration, currently possible by modifying the
|
||||
site's :file:`config.yaml` and adding the :yaml:`routeEnhancers` section manually, as there is no UI available for
|
||||
this configuration. See examples below.
|
||||
|
||||
It is possible to use the same enhancers multiple times with different configurations, however, be aware that
|
||||
it is not possible to combine multiple variants / enhancers that match multiple configurations.
|
||||
|
||||
However, custom enhancers can be built to overcome special use cases where e.g. two plugins with multiple parameters
|
||||
each could be configured. Otherwise, the first variant that matches the URL parameters is used for generation and
|
||||
resolving.
|
||||
|
||||
Enhancers
|
||||
^^^^^^^^^
|
||||
|
||||
TYPO3 comes with the following enhancers out of the box:
|
||||
|
||||
- Simple Enhancer (enhancer type "Simple")
|
||||
- Plugin Enhancer (enhancer type "Plugin")
|
||||
- Extbase Plugin Enhancer (enhancer type "Extbase")
|
||||
|
||||
Custom enhancers can be registered by adding an entry to an extensions :file:`ext_localconf.php`.
|
||||
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['enhancers']['CustomEnhancer'] = \MyVendor\MyPackage\Routing\CustomEnhancer::class;`
|
||||
|
||||
Within a configuration, an enhancer always evaluates the following properties:
|
||||
|
||||
* `type` - the short name of the enhancer as registered within :php:`$TYPO3_CONF_VARS`. This is mandatory.
|
||||
* `limitToPages` - an array of page IDs where this enhancer should be called. This is **optional**. This property (array)
|
||||
evaluates to only trigger an enhancer for specific pages. In case of special plugin pages it is
|
||||
useful to only enhance pages with IDs, to speed up performance for building page routes of all other pages.
|
||||
|
||||
Simple Enhancer
|
||||
---------------
|
||||
|
||||
The Simple Enhancer works with various route arguments to map them to an argument to be used later-on.
|
||||
|
||||
`index.php?id=13&category=241&tag=Benni`
|
||||
results in
|
||||
`https://www.example.com/path-to/my-page/show-by-category/241/Benni`
|
||||
|
||||
The configuration looks like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
# Unique name for the enhancers, used internally for referencing
|
||||
CategoryListing:
|
||||
type: Simple
|
||||
limitToPages: [13]
|
||||
routePath: '/show-by-category/{category_id}/{tag}'
|
||||
defaults:
|
||||
tag: ''
|
||||
requirements:
|
||||
category_id: '[0-9]{1,3}'
|
||||
tag: '[a-zA-Z0-9].*'
|
||||
_arguments:
|
||||
category_id: 'category'
|
||||
|
||||
The configuration option `routePath` defines the static keyword (previously known to some as "postVarSets" keyword for
|
||||
some TYPO3 folks), and the available placeholders.
|
||||
|
||||
The `defaults` section defines which URL parameters are optional. If the parameters are omitted on generation, they
|
||||
can receive a default value, and do not need a placeholder - it is also possible to add them at the very end of the
|
||||
`routePath`.
|
||||
|
||||
The `requirements` section exactly specifies what kind of parameter should be added to that route as regular expression.
|
||||
This way, it is configurable to only allow integer values for e.g. pagination. If the requirements are too loose, a
|
||||
URL signature parameter ("cHash") is added to the end of the URL which cannot be removed.
|
||||
|
||||
The `_arguments` section defines what Route Parameters should be available to the system. In this example, the
|
||||
placeholder is called `category_id` but the URL generation receives the argument `category`, so this is mapped to
|
||||
this very name.
|
||||
|
||||
An enhancer is only there to replace a set of placeholders and fill in URL parameters or resolve them properly
|
||||
later-on, but not to substitute the values with aliases, this can be achieved by Aspects.
|
||||
|
||||
|
||||
Plugin Enhancer
|
||||
---------------
|
||||
|
||||
The Plugin Enhancer works with plugins on a page that are commonly known as `Pi-Based Plugins`, where previously
|
||||
the following GET/POST variables were used:
|
||||
|
||||
* `index.php?id=13&tx_felogin_pi1[forgot]=1` (form to request token)
|
||||
* `index.php?id=13&tx_felogin_pi1[user]=82&tx_felogin_pi1[hash]=12345679%7CABCDEFGHIJKLMNOPQRSTUVWXYZ012345`
|
||||
(form to actually recover password, `%7C` is URL-encoded pipe character `|`)
|
||||
|
||||
The base for the plugin enhancer is to configure a so-called "namespace", in this case `tx_felogin_pi1` - the plugin's
|
||||
namespace.
|
||||
|
||||
The Plugin Enhancer explicitly sets exactly one additional variant for a specific use-case. In case of Frontend Login,
|
||||
we would need to set up multiple configurations of Plugin Enhancer for forgot and recover passwords.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
ForgotPasswordForm:
|
||||
type: Plugin
|
||||
limitToPages: [13]
|
||||
routePath: '/forgot-password/{forgot}'
|
||||
namespace: 'tx_felogin_pi1'
|
||||
defaults:
|
||||
forgot: '1'
|
||||
requirements:
|
||||
forgot: '1'
|
||||
ForgotPasswordRecover:
|
||||
type: Plugin
|
||||
limitToPages: [13]
|
||||
routePath: '/forgot-password/{user}/{forgothash}'
|
||||
namespace: 'tx_felogin_pi1'
|
||||
requirements:
|
||||
user: '[0-9]{1,3}'
|
||||
forgothash: '\d+\|[[:xdigit:]]{32}'
|
||||
|
||||
If URLs are generated with the given parameters to link to a page, the results will look like this:
|
||||
|
||||
* `https://www.example.com/path-to/my-page/forgot-password`
|
||||
(for `index.php?id=13&tx_felogin_pi1[forgot]=1`)
|
||||
* `https://www.example.com/path-to/my-page/forgot-password/82/12345679%7CABCDEFGHIJKLMNOPQRSTUVWXYZ012345`
|
||||
(for `index.php?id=13&tx_felogin_pi1[user]=82&tx_felogin_pi1[hash]=12345679%7CABCDEFGHIJKLMNOPQRSTUVWXYZ012345`)
|
||||
|
||||
If the input given to generate the URL does not meet the requirements, the route enhancer does not offer the
|
||||
variant and the parameters are added to the URL as regular query parameters. If e.g. the user parameter would be more
|
||||
than three characters, or non-numeric, this enhancer would not match anymore.
|
||||
|
||||
As you see, the Plugin Enhancer is used to specify placeholders and requirements, with a given namespace.
|
||||
|
||||
If you want to replace the user ID (in this example "82") with the username, you would need an aspect that can be
|
||||
registered within any enhancer, but see below for details on Aspects.
|
||||
|
||||
|
||||
Extbase Plugin Enhancer
|
||||
-----------------------
|
||||
|
||||
When creating extbase plugins, it is very common to have multiple controller/action combinations. The Extbase Plugin
|
||||
Enhancer is therefore an extension to the regular Plugin Enhancer, providing the functionality that multiple variants
|
||||
are generated, typically built on the amount of controller/action pairs.
|
||||
|
||||
The `namespace` option is omitted, as this is built with `extension` and `plugin` name.
|
||||
|
||||
The Extbase Plugin enhancer with the configuration below would now apply to the following URLs:
|
||||
|
||||
* `index.php?id=13&tx_news_pi1[controller]=News&tx_news_pi1[action]=list`
|
||||
* `index.php?id=13&tx_news_pi1[controller]=News&tx_news_pi1[action]=list&tx_news_pi1[page]=5`
|
||||
* `index.php?id=13&tx_news_pi1[controller]=News&tx_news_pi1[action]=detail&tx_news_pi1[news]=13`
|
||||
* `index.php?id=13&tx_news_pi1[controller]=News&tx_news_pi1[action]=archive&tx_news_pi1[year]=2018&&tx_news_pi1[month]=8`
|
||||
|
||||
And generate the following URLs
|
||||
|
||||
* `https://www.example.com/path-to/my-page/list/`
|
||||
* `https://www.example.com/path-to/my-page/list/5`
|
||||
* `https://www.example.com/path-to/my-page/detail/13`
|
||||
* `https://www.example.com/path-to/my-page/archive/2018/8`
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsPlugin:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/list/{page}', _controller: 'News::list', _arguments: {'page': '@widget_0/currentPage'} }
|
||||
- { routePath: '/tag/{tag_name}', _controller: 'News::list', _arguments: {'tag_name': 'overwriteDemand/tags'}}
|
||||
- { routePath: '/detail/{news_title}', _controller: 'News::detail', _arguments: {'news_title': 'news'} }
|
||||
- { routePath: '/archive/{year}/{month}', _controller: 'News::archive' }
|
||||
defaultController: 'News::list'
|
||||
defaults:
|
||||
page: '1'
|
||||
requirements:
|
||||
page: '\d+'
|
||||
|
||||
In this example, you also see that the `_arguments` parameter can be used to bring them into sub properties of an array,
|
||||
which is typically the case within demand objects for filtering functionality.
|
||||
|
||||
For the Extbase Plugin Enhancer, it is also possible to configure the namespace directly by skipping `extension`
|
||||
and `plugin` properties and just using the `namespace` property as in the regular Plugin Enhancer.
|
||||
|
||||
Aspects
|
||||
^^^^^^^
|
||||
|
||||
Now that we've looked into ways on how to extend a route to a page with arguments, and to put them into the URL
|
||||
path as segments, the detailed logic within one placeholder is in an aspect. The most common practice of an aspect
|
||||
is a so-called mapper. Map `{news_title}` which is a UID within TYPO3 to the actual news title, which is a field
|
||||
within the database table.
|
||||
|
||||
An aspect can be a way to modify, beautify or map an argument from the URL generation into a placeholder. That's why
|
||||
the terms "Mapper" and "Modifier" will pop up, depending on the different cases.
|
||||
|
||||
Aspects are registered within one single enhancer configuration with the option `aspects` and can be used with any
|
||||
enhancer.
|
||||
|
||||
.. note::
|
||||
Values in `defaults` and `requirements` always focus on corresponding internal raw values and not on
|
||||
generated route values.
|
||||
|
||||
.. note::
|
||||
`requirements` are ignored for route variables having a corresponding setting in `aspects`. Imagine there
|
||||
would be an aspect that is mapping internal value `1` to route value `one` and vice verse - it is not possible
|
||||
to explicitly define the `requirements` for this case - which is why `aspects` take precedence.
|
||||
|
||||
Let's start with some simpler examples first:
|
||||
|
||||
|
||||
StaticValueMapper
|
||||
-----------------
|
||||
|
||||
The StaticValueMapper replaces values simply on a 1:1 mapping list of an argument into a speaking segment, useful
|
||||
for a checkout process to define the steps into "cart", "shipping", "billing", "overview" and "finish", or in a
|
||||
simpler example to create human readable segments for all available months.
|
||||
|
||||
The configuration could look like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsArchive:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/{year}/{month}', _controller: 'News::archive' }
|
||||
defaultController: 'News::list'
|
||||
defaults:
|
||||
month: ''
|
||||
aspects:
|
||||
month:
|
||||
type: StaticValueMapper
|
||||
map:
|
||||
january: 1
|
||||
february: 2
|
||||
march: 3
|
||||
april: 4
|
||||
may: 5
|
||||
june: 6
|
||||
july: 7
|
||||
august: 8
|
||||
september: 9
|
||||
october: 10
|
||||
november: 11
|
||||
december: 12
|
||||
|
||||
|
||||
You'll see the placeholder "month" where the aspect replaces the value to a human readable url path segment.
|
||||
|
||||
It is possible to add an optional `localeMap` to that aspect to use the locale of a value to use in multi-language
|
||||
setups.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsArchive:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/{year}/{month}', _controller: 'News::archive' }
|
||||
defaultController: 'News::list'
|
||||
defaults:
|
||||
month: ''
|
||||
aspects:
|
||||
month:
|
||||
type: StaticValueMapper
|
||||
map:
|
||||
january: 1
|
||||
february: 2
|
||||
march: 3
|
||||
april: 4
|
||||
may: 5
|
||||
june: 6
|
||||
july: 7
|
||||
august: 8
|
||||
september: 9
|
||||
october: 10
|
||||
november: 11
|
||||
december: 12
|
||||
localeMap:
|
||||
- locale: 'de_.*'
|
||||
map:
|
||||
januar: 1
|
||||
februar: 2
|
||||
maerz: 3
|
||||
april: 4
|
||||
mai: 5
|
||||
juni: 6
|
||||
juli: 7
|
||||
august: 8
|
||||
september: 9
|
||||
oktober: 10
|
||||
november: 11
|
||||
dezember: 12
|
||||
|
||||
|
||||
LocaleModifier
|
||||
--------------
|
||||
|
||||
The enhanced part of a route path could be `/archive/{year}/{month}` - however, in multi-language setups, it should be
|
||||
possible to rename `/archive/` depending on the language that is given for this page translation. This modifier is a
|
||||
good example where a route path is modified but is not affected by arguments.
|
||||
|
||||
The configuration could look like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsArchive:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/{localized_archive}/{year}/{month}', _controller: 'News::archive' }
|
||||
defaultController: 'News::list'
|
||||
aspects:
|
||||
localized_archive:
|
||||
type: LocaleModifier
|
||||
default: 'archive'
|
||||
localeMap:
|
||||
- locale: 'fr_FR.*|fr_CA.*'
|
||||
value: 'archives'
|
||||
- locale: 'de_DE.*'
|
||||
value: 'archiv'
|
||||
|
||||
You'll see the placeholder "localized_archive" where the aspect replaces the localized archive based on the locale of
|
||||
the language of that page.
|
||||
|
||||
|
||||
StaticRangeMapper
|
||||
-----------------
|
||||
|
||||
A static range mapper allows to avoid the `cHash` and narrow down the available possibilities for a placeholder,
|
||||
and to explicitly define a range for a value, which is recommended for all kinds of pagination functionality.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsPlugin:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/list/{page}', _controller: 'News::list', _arguments: {'page': '@widget_0/currentPage'} }
|
||||
defaultController: 'News::list'
|
||||
defaults:
|
||||
page: '0'
|
||||
requirements:
|
||||
page: '\d+'
|
||||
aspects:
|
||||
page:
|
||||
type: StaticRangeMapper
|
||||
start: '1'
|
||||
end: '100'
|
||||
|
||||
This limits down the pagination to max. 100 pages, if a user calls the news list with page 101, then the route enhancer
|
||||
does not match and would not apply the placeholder.
|
||||
|
||||
PersistedAliasMapper
|
||||
--------------------
|
||||
|
||||
If an extension ships with a slug field, or a different field used for the speaking URL path, this database field
|
||||
can be used to build the URL:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
NewsPlugin:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: News
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/detail/{news_title}', _controller: 'News::detail', _arguments: {'news_title': 'news'} }
|
||||
defaultController: 'News::detail'
|
||||
aspects:
|
||||
news_title:
|
||||
type: PersistedAliasMapper
|
||||
tableName: 'tx_news_domain_model_news'
|
||||
routeFieldName: 'path_segment'
|
||||
routeValuePrefix: '/'
|
||||
|
||||
The PersistedAliasMapper looks up (via a so-called delegate pattern under the hood) to map the given value to a
|
||||
a URL. The property `tableName` points to the database table, property `routeFieldName` is the field which will be
|
||||
used within the route path for example.
|
||||
|
||||
The special `routeValuePrefix` is used for TCA type `slug` fields where the prefix `/` is within all fields of the
|
||||
field names, which should be removed in the case above.
|
||||
|
||||
If a field is used for `routeFieldName` that is not prepared to be put into the route path, e.g. the news title field,
|
||||
it still must be ensured that this is unique. On top, if there are special characters like spaces they will be
|
||||
URL-encoded, to ensure a definitive value, a slug TCA field is recommended.
|
||||
|
||||
PersistedPatternMapper
|
||||
----------------------
|
||||
|
||||
When a placeholder should be fetched from multiple fields of the database, the PersistedPatternMapper is for you.
|
||||
It allows to combine various fields into one variable, ensuring a unique value by e.g. adding the UID to the field
|
||||
without having the need of adding a custom slug field to the system.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
routeEnhancers:
|
||||
Blog:
|
||||
type: Extbase
|
||||
limitToPages: [13]
|
||||
extension: BlogExample
|
||||
plugin: Pi1
|
||||
routes:
|
||||
- { routePath: '/blog/{blogpost}', _controller: 'Blog::detail', _arguments: {'blogpost': 'post'} }
|
||||
defaultController: 'Blog::detail'
|
||||
aspects:
|
||||
blogpost:
|
||||
type: PersistedPatternMapper
|
||||
tableName: 'tx_blogexample_domain_model_post'
|
||||
routeFieldPattern: '^(?P<title>.+)-(?P<uid>\d+)$'
|
||||
routeFieldResult: '{title}-{uid}'
|
||||
|
||||
The `routeFieldPattern` option builds the title and uid fields from the database, the `routeFieldResult` shows
|
||||
how the placeholder will be output.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Some notes to the implementation:
|
||||
|
||||
While accessing a page in TYPO3 in the Frontend, all arguments are currently built back into the global
|
||||
GET parameters, but are also available as so-called `PageArguments` object, which is then used to be signed and verified
|
||||
that they are valid, when handing them to process a frontend request further.
|
||||
|
||||
If there are dynamic parameters (= parameters which are not strictly limited), a verification GET parameter `cHash`
|
||||
is added, which can and should not be removed from the URL. The concept of manually activating or deactivating
|
||||
the generation of a `cHash` is not optional anymore, but strictly built-in to ensure proper URL handling. If you
|
||||
really have the requirement to never have a cHash argument, ensure that all placeholders are having strict definitions
|
||||
on what could be the result of the page segment (e.g. pagination), and feel free to build custom mappers.
|
||||
|
||||
Setting the TypoScript option `typolink.useCacheHash` is not necessary anymore when running with a site configuration.
|
||||
|
||||
Please note that Enhancers and Page-based routing is only available for pages that are built with a site configuration.
|
||||
|
||||
All existing APIs like `typolink` or functionality evaluate the new Page Routing API directly and come with route
|
||||
enhancers.
|
||||
|
||||
Please note that if you update the Site configuration with enhancers that you need to clear all caches.
|
||||
|
||||
.. index:: Frontend, PHP-API
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86409:
|
||||
|
||||
============================================================================
|
||||
Feature: #86409 - Allow usage of environment variables in site configuration
|
||||
============================================================================
|
||||
|
||||
See :issue:`86409`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To enable environment variable based configuration the TYPO3 Core Yaml loader has been adjusted to
|
||||
be able to resolve environment variables. Resolving of variables in the loader can be enabled or
|
||||
disabled via flags. When editing the site configuration through the backend interface the resolving
|
||||
of environment variables needs to be disabled to be able to add environment configuration through
|
||||
the interface.
|
||||
|
||||
The format for environment variables is :yaml:`%env(ENV_NAME)%`. Environment variables may be used to replace
|
||||
complete values or parts of a value.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
In site configuration environment variables can be used. One common example would be the base url
|
||||
that can now be configured via an environment variable.
|
||||
|
||||
Additionally, the Yaml Loader class has two new flags: :yaml:`PROCESS_PLACEHOLDERS` and :yaml:`PROCESS_IMPORTS`.
|
||||
|
||||
* :yaml:`PROCESS_PLACEHOLDERS` decides whether or not placeholders (`%abc%`) will be resolved.
|
||||
* :yaml:`PROCESS_IMPORTS` decides whether or not imports (`imports` key) will be resolved.
|
||||
|
||||
Example usage in site configuration:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
base: 'https://%env(BASE_DOMAIN)%/'
|
||||
|
||||
.. index:: Backend, ext:core
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86422:
|
||||
|
||||
==================================================
|
||||
Feature: #86422 - TypoScript getText property site
|
||||
==================================================
|
||||
|
||||
See :issue:`86422`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Site configuration can now be accessed via the :typoscript:`getText` property in TypoScript.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
page.10 = TEXT
|
||||
page.10.data = site:base
|
||||
page.10.wrap = This is your base URL: |
|
||||
|
||||
Where :typoscript:`site` is the keyword for accessing an aspect, and the following parts are the configuration key(s) to access.
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
data = site:customConfigKey.nested.value
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing site configuration is now possible in TypoScript, which enables to store site specific configuration options
|
||||
in one central place and allows usage of that configuration from different contexts. While this sounds similar to using
|
||||
TypoScript, with using site configuration this may also be used from backend or CLI context as long as the rootPageId
|
||||
of the site is known. To avoid duplicating configuration options, TypoScript can now access these properties, too.
|
||||
|
||||
.. index:: PHP-API, ext:frontend
|
||||
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-86457:
|
||||
|
||||
=======================================================
|
||||
Feature: #86457 - TCA Type Slug adds a prepending slash
|
||||
=======================================================
|
||||
|
||||
See :issue:`86457`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new TCA type slug field now hard-codes a slash as a prefix for all pages, as this is
|
||||
mandatory for URL resolving and ensuring a uniqueness within a site.
|
||||
|
||||
However, for slug types within regular records, it is not necessary to do so, therefore the slash
|
||||
is never prepended on a "regular" slug field.
|
||||
|
||||
If - in some special cases - the "slug" field should contain a slash (due to e.g. nested categories
|
||||
with human readable url path segments), a new option `prependSlash` is added to TCA type slug.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Third-party extensions using the slug field now receive a slug value without a slash, and
|
||||
can use this as a regular - sanitized - slug field. It is however recommended to use the
|
||||
`uniqueInPid` eval option to ensure uniqueness.
|
||||
|
||||
If a nested record structure is given, it is recommended to use the new option :php:`prependSlash`
|
||||
by setting it to :php:`true`.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'type' => 'slug',
|
||||
'config' => [
|
||||
'generatorOptions' => [
|
||||
'fields' => ['title'],
|
||||
]
|
||||
'fallbackCharacter' => '-',
|
||||
'prependSlash' => true,
|
||||
'eval' => 'uniqueInPid'
|
||||
]
|
||||
|
||||
.. index:: TCA
|
||||
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-90115:
|
||||
|
||||
======================================================
|
||||
Feature: #90115 - Add support for Kinyarwanda language
|
||||
======================================================
|
||||
|
||||
See :issue:`90115`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Kinyarwanda - the Rwanda official language is now available to use in TYPO3 system-wide for
|
||||
translation labels, giving full support for having a TYPO3 installation (Frontend and Backend)
|
||||
working with Kinyarwanda out-of-the-box.
|
||||
|
||||
The ISO-639-1 language code "rw" is now added to TYPO3's default locales.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Kinyarwanda will be shown on the "Manage Language Packs" modal and also possible to select
|
||||
in BE user preferences. It is possible to use the "kw" ISO-639-1 iso code in site languages
|
||||
to use the labels in TYPO3 Frontend.
|
||||
|
||||
.. index:: Backend, ext:core
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-82363:
|
||||
|
||||
================================================================================
|
||||
Important: #82363 - Make Extbase translation handling consistent with TypoScript
|
||||
================================================================================
|
||||
|
||||
See :issue:`82363`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Extbase now renders the translated records in the same way TypoScript rendering does.
|
||||
The new behaviour is controlled by the Extbase feature switch :typoscript:`consistentTranslationOverlayHandling`.
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.tx_extbase.features.consistentTranslationOverlayHandling = 1
|
||||
|
||||
The new behaviour is enabled by default in TYPO3 v9. The feature switch will be removed in TYPO3 v10, so there will be just
|
||||
one way of fetching records.
|
||||
You can override the setting using normal TypoScript.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Users relying on the old behaviour can disable the feature switch.
|
||||
|
||||
The change modifies how Extbase interprets the TypoScript settings
|
||||
:typoscript:`config.sys_language_mode` and :typoscript:`config.sys_language_overlay` and the
|
||||
:php:`Typo3QuerySettings` properties :php:`languageOverlayMode` and :php:`languageMode`.
|
||||
|
||||
Changes in the rendering:
|
||||
|
||||
1) Setting :php:`Typo3QuerySettings->languageMode` does **not** influence how Extbase queries records anymore.
|
||||
The corresponding TypoScript setting :typoscript:`config.sys_language_mode` is used by the core
|
||||
to decide what to do when a page is not translated to the given language (display 404, or try page with different language).
|
||||
Users who used to set :php:`Typo3QuerySettings->languageMode` to `strict` should use
|
||||
:php:`Typo3QuerySettings->setLanguageOverlayMode('hideNonTranslated')` to get translated records only.
|
||||
|
||||
The old behavior was confusing, because `languageMode` had different meaning and accepted different
|
||||
values in TS context and in Extbase context.
|
||||
|
||||
2) Setting :php:`Typo3QuerySettings->languageOverlayMode` to :php:`true` makes Extbase fetch records
|
||||
from default language and overlay them with translated values. So e.g. when a record is hidden in
|
||||
the default language, it will not be shown. Also records without translation parents will not be shown.
|
||||
For relations, Extbase reads relations from a translated record (so it’s not possible to inherit
|
||||
a field value from translation source) and then passes the related records through :php:`$pageRepository->getRecordOverlay()`.
|
||||
So e.g. when you have a translated `tt_content` with FAL relation, Extbase will show only those
|
||||
`sys_file_reference` records which are connected to the translated record (not caring whether some of
|
||||
these files have `l10n_parent` set).
|
||||
|
||||
Previously :php:`Typo3QuerySettings->languageOverlayMode` had no effect.
|
||||
Extbase always performed an overlay process on the result set.
|
||||
|
||||
3) Setting :php:`Typo3QuerySettings->languageOverlayMode` to :php:`false` makes Extbase fetch aggregate
|
||||
root records from a given language only. Extbase will follow relations (child records) as they are,
|
||||
without checking their `sys_language_uid` fields, and then it will pass these records through
|
||||
:php:`$pageRepository->getRecordOverlay()`.
|
||||
This way the aggregate root record's sorting and visibility doesn't depend on default language records.
|
||||
Moreover, the relations of a record, which are often stored using default language uids,
|
||||
are translated in the final result set (so overlay happens).
|
||||
|
||||
For example:
|
||||
Given a translated `tt_content` having relation to 2 categories (in the mm table translated
|
||||
tt_content record is connected to category uid in default language), and one of the categories is translated.
|
||||
Extbase will return a `tt_content` model with both categories.
|
||||
If you want to have just translated category shown, remove the relation in the translated `tt_content`
|
||||
record in the TYPO3 Backend.
|
||||
|
||||
Note that by default :php:`Typo3QuerySettings` uses the global TypoScript configuration like
|
||||
:typoscript:`config.sys_language_overlay` and :php:`$GLOBALS['TSFE']->sys_language_content`
|
||||
(calculated based on :typoscript:`config.sys_language_uid` and :typoscript:`config.sys_language_mode`).
|
||||
So you need to change :php:`Typo3QuerySettings` manually only if your Extbase code should
|
||||
behave different than other `tt_content` rendering.
|
||||
|
||||
Setting :php:`setLanguageOverlayMode()` on a query influences **only** fetching of the aggregate root. Relations are always
|
||||
fetched with :php:`setLanguageOverlayMode(true)`.
|
||||
|
||||
When querying data in translated language, and having :php:`setLanguageOverlayMode(true)`, the relations
|
||||
(child objects) are overlaid even if aggregate root is not translated.
|
||||
See :php:`QueryLocalizedDataTest->queryFirst5Posts()`.
|
||||
|
||||
Following examples show how to query data in Extbase in different scenarios, independent of the global TS settings:
|
||||
|
||||
1) Fetch records from the language uid=1 only, with no overlays.
|
||||
Previously (:typoscript:`consistentTranslationOverlayHandling = 0`):
|
||||
|
||||
It was not possible.
|
||||
|
||||
|
||||
Now (:typoscript:`consistentTranslationOverlayHandling = 1`):
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$querySettings = $query->getQuerySettings();
|
||||
$querySettings->setLanguageUid(1);
|
||||
$querySettings->setLanguageOverlayMode(false);
|
||||
|
||||
2) Fetch records from the language uid=1, with overlay, but hide non-translated records
|
||||
Previously (:typoscript:`consistentTranslationOverlayHandling = 0`):
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$querySettings = $query->getQuerySettings();
|
||||
$querySettings->setLanguageUid(1);
|
||||
$querySettings->setLanguageMode('strict');
|
||||
|
||||
Now (:typoscript:`consistentTranslationOverlayHandling = 1`):
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$querySettings = $query->getQuerySettings();
|
||||
$querySettings->setLanguageUid(1);
|
||||
$querySettings->setLanguageOverlayMode('hideNonTranslated');
|
||||
|
||||
|
||||
+------------------------+-------------------------------------------------------------------------------------------------+----------------------------------------------+------------------------------+
|
||||
| QuerySettings property | old behaviour | new behaviour | default value (TSFE|Extbase) |
|
||||
+========================+=================================================================================================+==============================================+==============================+
|
||||
| languageUid | | same | 0 |
|
||||
+------------------------+-------------------------------------------------------------------------------------------------+----------------------------------------------+------------------------------+
|
||||
| respectSysLanguage | | same | `true` |
|
||||
+------------------------+-------------------------------------------------------------------------------------------------+----------------------------------------------+------------------------------+
|
||||
| languageOverlayMode | not used | values: `true`, `false`, `hideNonTranslated` | 0 | `true` |
|
||||
| | | | |
|
||||
+------------------------+-------------------------------------------------------------------------------------------------+----------------------------------------------+------------------------------+
|
||||
| languageMode | documented values: `null`, `content_fallback`, `strict` or `ignore`. | not used | `null` |
|
||||
| | Only `strict` was evaluated. Setting `LanguageMode` to `strict` | | |
|
||||
| | caused passing `hideNonTranslated` param to `getRecordOverlay` in :php:`Typo3DbBackend` | | |
|
||||
| | and changing the query to work similar to TypoScript `sys_language_overlay = hideNonTranslated` | | |
|
||||
+------------------------+-------------------------------------------------------------------------------------------------+----------------------------------------------+------------------------------+
|
||||
|
||||
|
||||
Identifiers
|
||||
-----------
|
||||
|
||||
Domain models have a main identifier `uid` and two additional properties `_localizedUid` and `_versionedUid`.
|
||||
Depending on whether the `languageOverlayMode` mode is enabled (`true` or `'hideNonTranslated'`) or disabled (`false`),
|
||||
the identifier contains different values.
|
||||
When `languageOverlayMode` is enabled then `uid` property contains `uid` value of the default language record,
|
||||
the `uid` of the translated record is kept in the `_localizedUid`.
|
||||
|
||||
+----------------------------------------------------------+-------------------------+---------------------------+
|
||||
| Context | Record in language 0 | Translated record |
|
||||
+==========================================================+=========================+===========================+
|
||||
| Database | uid:2 | uid:11, l10n_parent:2 |
|
||||
+----------------------------------------------------------+-------------------------+---------------------------+
|
||||
| Domain Object values with `languageOverlayMode` enabled | uid:2, _localizedUid:2 | uid:2, _localizedUid:11 |
|
||||
+----------------------------------------------------------+-------------------------+---------------------------+
|
||||
| Domain Object values with `languageOverlayMode` disabled | uid:2, _localizedUid:2 | uid:11, _localizedUid:11 |
|
||||
+----------------------------------------------------------+-------------------------+---------------------------+
|
||||
|
||||
See tests in :file:`extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php`.
|
||||
|
||||
The :php:`$repository->findByUid()` (or :php:`$persistenceManager->getObjectByIdentifier()`) method takes current
|
||||
rendering language into account (e.g. L=1). It does not take `defaultQuerySetting` set on the repository into account.
|
||||
This method always performs an overlay.
|
||||
Values in braces show previous behaviour (disabled flag) if different than current.
|
||||
|
||||
The bottom line is that with the feature flag on, you can now use :php:`findByUid()` using translated record uid to get
|
||||
translated content independently from language set in global context.
|
||||
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| | | L=0 | L=1 |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| repository method | property | Overlay | No overlay | Overlay | No overlay |
|
||||
+===================+================+======================+======================+======================+======================+
|
||||
| findByUid(2) | title | Post 2 | Post 2 | Post 2 - DA | Post 2 - DA |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| | uid | 2 | 2 | 2 | 2 |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| | _localizedUid | 2 | 2 | 11 | 11 |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| findByUid(11) | title | Post 2 - DA (Post 2) | Post 2 - DA (Post 2) | Post 2 - DA | Post 2 - DA |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| | uid | 2 | 2 | 2 | 2 |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
| | _localizedUid | 11 (2) | 11 (2) | 11 | 11 |
|
||||
+-------------------+----------------+----------------------+----------------------+----------------------+----------------------+
|
||||
|
||||
.. note::
|
||||
|
||||
Note that :php:`$repository->findByUid()` internally sets :php:`respectSysLanguage(false)` so it behaves differently
|
||||
than a regular query by an `uid` like :php:`$query->matching($query->equals('uid', 11));`
|
||||
The regular query will return :php:`null` if passed `uid` doesn't match
|
||||
the language set in the :php:`$querySettings->setLanguageUid()` method.
|
||||
|
||||
Filtering & sorting
|
||||
-------------------
|
||||
|
||||
When filtering by aggregate root property like `Post->title`,
|
||||
both filtering and sorting takes translated values into account and you will get correct results, also with pagination.
|
||||
|
||||
When filtering or ordering by child object property, then Extbase does a left join between aggregate root
|
||||
table and child record table.
|
||||
Then the filter is applied as where clause. This means that filtering or ordering by child record property
|
||||
only takes values from child records which uids are stored in db (in most cases its default language record).
|
||||
See :php:`TranslationTest::fetchingTranslatedPostByBlogTitle()`
|
||||
|
||||
This limitation also applies to Extbase with feature flag being disabled.
|
||||
|
||||
Summary of the important code changes
|
||||
=====================================
|
||||
|
||||
1) :php:`DataMapper` gets a :php:`Query` as a constructor parameter. This allows to use aggregate root :php:`QuerySettings` (language)
|
||||
when fetching child records/relations. Later, in a separate patch we can pass other settings too e.g. :php:`setIgnoreEnableFields`
|
||||
to fix issue around this setting. See :php:`DataMapper->getPreparedQuery` method.
|
||||
2) :php:`DataMapper` is passed to :php:`LazyLoadingProxy` and :php:`LazyObjectStorage`, so the settings don't get lost when fetching data lazily.
|
||||
3) :php:`Query` object gets a new property `parentQuery` which is useful to detect whether we're fetching aggregate root or child object.
|
||||
4) Extbase model for :php:`FileReference` uses `_localizedUid` for fetching `OriginalResource`
|
||||
5) :php:`DataMapper` forces child records to be fetched using :php:`setLanguageOverlayMode(true)`.
|
||||
6) When getRespectSysLanguage is set, :php:`DataMapper` uses aggregate root language to overlay child records to correct language.
|
||||
7) The `where` clause used for finding translated records in overlay mode (`true`, `hideNonTranslated`) has been fixed.
|
||||
It filters out the non translated records on db side in case `hideNonTranslated` is set.
|
||||
It allows for filtering and sorting by translated values. See :php:`Typo3DbQueryParser->getLanguageStatement()`
|
||||
|
||||
|
||||
Most important known issues (this patch doesn't solve)
|
||||
======================================================
|
||||
|
||||
- Persistence session uses the same key for default language record and the translation - https://forge.typo3.org/issues/59992
|
||||
- Extbase allows to fetch deleted/hidden records - https://forge.typo3.org/issues/86307
|
||||
|
||||
|
||||
For more information about rendering please refer to the TypoScript reference_.
|
||||
|
||||
.. _reference: https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html?highlight=sys_language_mode#sys-language-overlay
|
||||
|
||||
.. index:: Database, TCA, TypoScript, ext:extbase
|
||||
@@ -0,0 +1,20 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-85560:
|
||||
|
||||
==================================================
|
||||
Important: #85560 - Location of XLF labels changed
|
||||
==================================================
|
||||
|
||||
See :issue:`85560`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Downloaded files for XLF language files are usually stored within :file:`typo3conf/l10n`. When the environment
|
||||
variable `TYPO3_PATH_ROOT` is set, which is common for all composer-based installations, the XLF language files
|
||||
are now found outside the document root, available under :file:`var/labels/`.
|
||||
|
||||
The Environment API :php:`Environment::getLabelsPath()` resolves the correct full location path prefix.
|
||||
|
||||
.. index:: PHP-API
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-86173:
|
||||
|
||||
=============================================================================
|
||||
Important: #86173 - Location of supplied .htaccess / web.config files changed
|
||||
=============================================================================
|
||||
|
||||
See :issue:`86173`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The location of the former out-of-the-box supplied `_.htaccess` and `_web.config` have been changed and are created
|
||||
automatically during the TYPO3 installation process.
|
||||
|
||||
New location of file templates
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
During a new installation, the files are created automatically. However, there might be situations, where you need
|
||||
one of the files (e.g. after switching the webserver or for testing purposes). The files can now be found under the
|
||||
following paths:
|
||||
|
||||
* :file:`typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess` (Apache)
|
||||
* :file:`typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-web-config` (IIS)
|
||||
|
||||
.. index:: ext:install
|
||||
@@ -0,0 +1,52 @@
|
||||
:template: changelogOverview.html
|
||||
.. include:: /Includes.rst.txt
|
||||
.. _changelog-9-5:
|
||||
|
||||
9.5 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-*
|
||||
Reference in New Issue
Block a user