.. include:: /Includes.rst.txt .. _deprecation-95164: ===================================================== Deprecation: #95164 - ext:backend BackendTemplateView ===================================================== See :issue:`95164` Description =========== To simplify and align the view part of Extbase-based backend module controller code with non-Extbase based controllers, class :php:`TYPO3\CMS\Backend\View\BackendTemplateView` has been marked as deprecated and will be removed in TYPO3 v12. This follows the general Core strategy to have document header related code using the :php:`ModuleTemplate` class structure within controllers directly, while Extbase views render only the main body part. Impact ====== Extensions should switch away from using :php:`BackendTemplateView`. By hiding an instance of :php:`ModuleTemplate` class, :php:`BackendTemplateView` basically added a no longer needed level of indirection to code that should be located directly within controller actions. Together with the TYPO3 v11 requirement within Extbase controller actions to return responses directly, combined with Extbase Request object now implementing the PSR-7 ServerRequestInterface, and with the deprecation of other doc header related Fluid View helpers, Extbase controller action becomes much more obvious code wise. Affected installations ====================== Instances with extensions using class :php:`BackendTemplateView` are affected. Candidates are typically Extbase based extensions that deliver backend modules. The extension scanner will find usages as strong match. Migration ========= A transition away from :php:`BackendTemplateView` should be usually pretty straight: Instead of retrieving a :php:`ModuleTemplate` instance from the view, the :php:`ModuleTemplateFactory` should be injected and an instance retrieved using :php:`create()`. A typical scenario before: .. code-block:: php class MyController extends ActionController { protected $defaultViewObjectName = BackendTemplateView::class; public function myAction(): ResponseInterface { $this->view->assign('someVar', 'someContent'); $moduleTemplate = $this->view->getModuleTemplate(); // Adding title, menus, buttons, etc. using $moduleTemplate ... return $this->htmlResponse(); } } Dropping :php:`BackendTemplateView` leads to code similar to this: .. code-block:: php class MyController extends ActionController { protected ModuleTemplateFactory $moduleTemplateFactory; public function __construct( ModuleTemplateFactory $moduleTemplateFactory, ) { $this->moduleTemplateFactory = $moduleTemplateFactory; } public function myAction(): ResponseInterface { $this->view->assign('someVar', 'someContent'); $moduleTemplate = $this->moduleTemplateFactory->create($this->request); // Adding title, menus, buttons, etc. using $moduleTemplate ... $moduleTemplate->setContent($this->view->render()); return $this->htmlResponse($moduleTemplate->renderContent()); } } .. index:: Backend, Fluid, PHP-API, FullyScanned, ext:backend