Deprecation: #86198 - Protected RecordListController

See Issue #86198

Description

The following properties of class TYPO3\CMS\Recordlist\Controller\RecordListController changed their visibility from public to protected and should not be called any longer:

  • id
  • pointer
  • table
  • search_field
  • search_levels
  • showLimit
  • returnUrl
  • clear_cache
  • cmd
  • cmd_table
  • perms_clause
  • pageinfo
  • MOD_MENU
  • content
  • body
  • imagemode
  • doc

The following methods of class TYPO3\CMS\Recordlist\Controller\RecordListController changed their visibility from public to protected and should not be called any longer:

  • init()
  • menuConfig()
  • clearCache()
  • main()
  • getModuleTemplate()

Additionally, the two hooks

  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawHeaderHook']
  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawFooterHook']

changed their signature: The second argument, an instance of the parent object RecordListController will be removed in TYPO3 v10. Use the instance of the PSR-7 ServerRequestInterface that is provided as array key request of the first argument.

Furthermore, the assignment of an object instance of class RecordListController as 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 E_USER_DEPRECATED error.

Affected Installations

Instances are usually only affected if an extension registers a hook for $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawHeaderHook'] or $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 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 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);
}