187 lines
5.7 KiB
ReStructuredText
187 lines
5.7 KiB
ReStructuredText
.. include:: /Includes.rst.txt
|
|
|
|
.. _deprecation-107823-1761297638:
|
|
|
|
====================================================================================
|
|
Deprecation: #107823 - ButtonBar, Menu, and MenuRegistry make* methods deprecated
|
|
====================================================================================
|
|
|
|
See :issue:`107823`
|
|
|
|
Description
|
|
===========
|
|
|
|
The factory methods in :php:`\TYPO3\CMS\Backend\Template\Components\ButtonBar`
|
|
for creating button instances, in
|
|
:php:`\TYPO3\CMS\Backend\Template\Components\Menu` for creating menu item
|
|
instances, and in
|
|
:php:`\TYPO3\CMS\Backend\Template\Components\MenuRegistry` for creating
|
|
menu instances have been deprecated in favor of using the new
|
|
:php:`\TYPO3\CMS\Backend\Template\Components\ComponentFactory` class directly.
|
|
|
|
The following methods are now deprecated:
|
|
|
|
* :php:`ButtonBar::makeGenericButton()`
|
|
* :php:`ButtonBar::makeInputButton()`
|
|
* :php:`ButtonBar::makeSplitButton()`
|
|
* :php:`ButtonBar::makeDropDownButton()`
|
|
* :php:`ButtonBar::makeLinkButton()`
|
|
* :php:`ButtonBar::makeFullyRenderedButton()`
|
|
* :php:`ButtonBar::makeShortcutButton()`
|
|
* :php:`ButtonBar::makeButton()`
|
|
* :php:`Menu::makeMenuItem()`
|
|
* :php:`MenuRegistry::makeMenu()`
|
|
|
|
Impact
|
|
======
|
|
|
|
Calling any of the deprecated :php:`make*()` methods on
|
|
:php-short:`\TYPO3\CMS\Backend\Template\Components\ButtonBar`,
|
|
:php-short:`\TYPO3\CMS\Backend\Template\Components\Menu`, or
|
|
:php-short:`\TYPO3\CMS\Backend\Template\Components\MenuRegistry` will trigger
|
|
a PHP deprecation notice.
|
|
|
|
The methods continue to work in TYPO3 v14 but will be removed in TYPO3 v15.
|
|
|
|
Affected installations
|
|
======================
|
|
|
|
All extensions using :php:`ButtonBar::make*()` methods to create buttons,
|
|
:php:`Menu::makeMenuItem()` to create menu items, or
|
|
:php:`MenuRegistry::makeMenu()` to create menus are affected.
|
|
The extension scanner will report any usages.
|
|
|
|
Migration
|
|
=========
|
|
|
|
Inject :php:`\TYPO3\CMS\Backend\Template\Components\ComponentFactory` in your
|
|
controller and use its :php:`create*()` methods instead of
|
|
:php:`ButtonBar::make*()`.
|
|
|
|
**Before:**
|
|
|
|
.. code-block:: php
|
|
:caption: Example (before)
|
|
|
|
use Psr\Http\Message\ResponseInterface;
|
|
|
|
public function myAction(): ResponseInterface
|
|
{
|
|
$buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
|
|
|
|
$linkButton = $buttonBar->makeLinkButton()
|
|
->setHref($url)
|
|
->setTitle('My Link')
|
|
->setIcon($icon);
|
|
|
|
$buttonBar->addButton($linkButton);
|
|
// ...
|
|
}
|
|
|
|
**After:**
|
|
|
|
.. code-block:: php
|
|
:caption: Example (after)
|
|
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use TYPO3\CMS\Backend\Template\Components\ComponentFactory;
|
|
|
|
public function __construct(
|
|
protected readonly ComponentFactory $componentFactory,
|
|
) {}
|
|
|
|
public function myAction(): ResponseInterface
|
|
{
|
|
$buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
|
|
|
|
$linkButton = $this->componentFactory->createLinkButton()
|
|
->setHref($url)
|
|
->setTitle('My Link')
|
|
->setIcon($icon);
|
|
|
|
$buttonBar->addButton($linkButton);
|
|
// ...
|
|
}
|
|
|
|
Additionally, consider using the preconfigured button creation methods like
|
|
:php:`createBackButton()`, :php:`createCloseButton()`,
|
|
:php:`createSaveButton()`, :php:`createReloadButton()`, and
|
|
:php:`createViewButton()` for common button patterns.
|
|
|
|
For the low-level :php:`makeButton(string $className)` method, use
|
|
:php:`GeneralUtility::makeInstance()` directly or the appropriate
|
|
:php:`ComponentFactory::create*()` method:
|
|
|
|
.. code-block:: php
|
|
:caption: Example (button instantiation)
|
|
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
|
|
// Before:
|
|
$button = $buttonBar->makeButton(MyCustomButton::class);
|
|
|
|
// After (option 1 - direct instantiation):
|
|
$button = GeneralUtility::makeInstance(MyCustomButton::class);
|
|
|
|
// After (option 2 - via factory if it's a standard button):
|
|
$button = $this->componentFactory->createLinkButton();
|
|
|
|
For :php:`Menu::makeMenuItem()`, use :php:`ComponentFactory::createMenuItem()`:
|
|
|
|
.. code-block:: php
|
|
:caption: Example (menu items)
|
|
|
|
use TYPO3\CMS\Backend\Template\Components\ComponentFactory;
|
|
|
|
// Before:
|
|
$menu = $menuRegistry->makeMenu();
|
|
$menuItem = $menu->makeMenuItem()
|
|
->setTitle('My View')
|
|
->setHref($url);
|
|
$menu->addMenuItem($menuItem);
|
|
|
|
// After:
|
|
public function __construct(
|
|
protected readonly ComponentFactory $componentFactory,
|
|
) {}
|
|
|
|
$menu = $this->componentFactory->createMenu();
|
|
$menuItem = $this->componentFactory->createMenuItem()
|
|
->setTitle('My View')
|
|
->setHref($url);
|
|
$menu->addMenuItem($menuItem);
|
|
|
|
For :php:`MenuRegistry::makeMenu()`, use :php:`ComponentFactory::createMenu()`:
|
|
|
|
.. code-block:: php
|
|
:caption: Example (menus)
|
|
|
|
use TYPO3\CMS\Backend\Template\Components\ComponentFactory;
|
|
|
|
// Before:
|
|
$menuRegistry = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry();
|
|
$menu = $menuRegistry->makeMenu();
|
|
$menu->setIdentifier('viewSelector')->setLabel('View');
|
|
|
|
// After:
|
|
public function __construct(
|
|
protected readonly ComponentFactory $componentFactory,
|
|
) {}
|
|
|
|
$menuRegistry = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry();
|
|
$menu = $this->componentFactory->createMenu();
|
|
$menu->setIdentifier('viewSelector')->setLabel('View');
|
|
|
|
Additionally, note that :php:`Menu::addMenuItem()` now returns :php:`static`
|
|
to support fluent interface patterns:
|
|
|
|
.. code-block:: php
|
|
:caption: Example (fluent chaining)
|
|
|
|
// Now possible with fluent interface:
|
|
$menu->addMenuItem($menuItem1)
|
|
->addMenuItem($menuItem2)
|
|
->addMenuItem($menuItem3);
|
|
|
|
.. index:: Backend, PHP-API, FullyScanned, ext:backend
|