Deprecation: #84195 - Protected methods and properties in EditDocumentController

See forge#84195

Description

This file is about third party usage (consumer that call the class as well as signals or hooks depending on it) of TYPO3\CMS\Backend\Controller\EditDocumentController.

A series of class properties has been set to protected. They will throw deprecation warnings if called public from outside:

  • $editconf

  • $defVals

  • $overrideVals

  • $columnsOnly

  • $returnUrl

  • $closeDoc

  • $doSave

  • $returnEditConf

  • [not scanned] $uc

  • $retUrl

  • $R_URL_parts

  • $R_URL_getvars

  • $storeArray

  • $storeUrl

  • $storeUrlMd5

  • $docDat

  • $docHandler

  • [not scanned] $cmd

  • [not scanned] $mirror

  • $cacheCmd

  • $redirect

  • $returnNewPageId

  • $popViewId

  • $popViewId_addParams

  • $viewUrl

  • $recTitle

  • $noView

  • $MCONF

  • [not scanned] $doc

  • $perms_clause

  • [not scanned] $template

  • $content

  • $R_URI

  • $pageinfo

  • $storeTitle

  • $firstEl

  • $errorC

  • $newC

  • $viewId

  • $viewId_addParams

  • $modTSconfig

  • $dontStoreDocumentRef

Some properties are set to @internal and may vanish or be set to protected in v10 without further notice:

  • [not scanned] $data

  • $elementsData

All methods not used as entry points by TYPO3\CMS\Backend\Http\RouteDispatcher will be removed or set to protected in v10 and throw deprecation warnings if used from a third party:

  • preInit()

  • doProcessData()

  • processData()

  • [not scanned] init()

  • [note scanned] main()

  • makeEditForm()

  • compileForm()

  • shortCutLink()

  • openInNewWindowLink()

  • languageSwitch()

  • localizationRedirect()

  • getLanguages()

  • fixWSversioningInEditConf()

  • getRecordForEdit()

  • compileStoreDat()

  • getNewIconMode()

  • closeDocument()

  • setDocument()

Two slots retrieve a parent object that will throw deprecation warnings if properties are read or methods are called. They receive a ServerRequestInterface $request argument as second argument instead:

  • TYPO3\CMS\Backend\Controller\EditDocumentController::preInitAfter

  • TYPO3\CMS\Backend\Controller\EditDocumentController::preInit

Impact

Calling one of the above methods or accessing one of the above properties on an instance of EditDocumentController will throw a deprecation warning in v9 and a PHP fatal in v10.

Affected Installations

The extension scanner will find most usages, but may also find some false positives. The most common property and method names like $data are not registered and will not be found if an extension uses that on an instance of EditDocumenController. In general all extensions that set properties or call methods except mainAction() are affected.

Installations may alse be affected, if the two signals TYPO3\CMS\Backend\Controller\EditDocumentController::preInitAfter and TYPO3\CMS\Backend\Controller\EditDocumentController::InitAfter are used and the slot write to or reads from first argument "parent object".

Migration

In general, extensions should not instantiate and re-use controllers of the core. Existing usages should be rewritten to be free of calls like these. Registered slots for the two signals preInitAfter and initAfter should read (not write!) from new second argument $request instead. Slots that currently write to "parent object" should instead be turned into a PSR-15 middleware to manipulate $request before EditDocumentController is called.