.. include:: /Includes.rst.txt .. _breaking-98377-1663607123: ================================================================================== Breaking: #98377 - Fluid StandaloneView does not create an Extbase Request anymore ================================================================================== See :issue:`98377` Description =========== In our efforts to further speed up, streamline and separate Fluid from Extbase, the :php:`\TYPO3\CMS\Fluid\View\StandaloneView` has been changed to no longer create an Extbase Request anymore. StandaloneView is typically not used in Extbase context, creating an Extbase Request at this point was a very unfortunate architectural flaw leading to a not wanted context switch. Not having an Extbase Request within StandaloneView anymore can have impact on behavior of some Fluid ViewHelpers. Impact ====== Common usages of StandaloneView are a frontend related :typoscript:`FLUIDTEMPLATE` content object, plus various usages in non-Extbase extensions like rendering eMails or similar. Within :typoscript:`FLUIDTEMPLATE`, the current non-Extbase PSR-7 ServerRequest is actively set to StandaloneView, custom extension usages may need to :php:`$view->setRequest($request)` explicitly. Some ViewHelpers that rely on Extbase functionality throw exceptions when a Request is not set, or if the Request is not an Extbase Request. Those will refuse to work for instance when used in a template triggered by a :typoscript:`FLUIDTEMPLATE` content object. Most notably, all :html:`f:form` ViewHelpers are affected of this, plus eventually custom ViewHelpers that access Extbase specific :php:`Request` methods. Affected installations ====================== Instances with extensions using StandaloneView in their code may need attention, and frontend rendering using :typoscript:`FLUIDTEMPLATE` content objects may need adaptions if Extbase-only ViewHelpers like :html:`f:form` are used. Migration ========= Avoiding :html:`f:form` in non-Extbase context ---------------------------------------------- The :html:`f:form` ViewHelpers are Extbase specific: They especially take care of handling Extbase internal fields like :html:`__referrer` and similar. The casual solution is to switch these usages away from those ViewHelpers, and use the HTML counterparts directly, for instance using :html:`` instead of :html:``. Custom StandaloneView code -------------------------- Extensions that instantiate :php:`StandaloneView` may want to :php:`$view->setRequest($request)` to hand over the current request to the view, since the request is no longer initialized automatically. This is needed for ViewHelpers that rely on :php:`$renderingContext->getRequest()`. Custom ViewHelpers ------------------ Custom ViewHelpers used in :php:`StandaloneView` that call methods from Extbase :php:`TYPO3\CMS\Extbase\Mvc\Request` which are not part of :php:`Psr\Http\Message\ServerRequestInterface` will throw fatal PHP errors. Possible solutions: * Create an Extbase Request within a controller and :php:`setRequest()` it to the view instance as quick solution. * Properly boot Extbase using the Extbase Bootstrap to have a fully initialized Extbase Request in the View. * Avoid using Extbase specific methods within the ViewHelper by checking if the incoming request implements Extbase :php:`TYPO3\CMS\Extbase\Mvc\RequestInterface`. This allows creating "hybrid" ViewHelpers that work in both contexts. * Avoid using Extbase specific methods within the ViewHelper by fetching data from the given :php:`Psr\Http\Message\ServerRequestInterface` Request, or it's attached core attributes. .. index:: Fluid, PHP-API, NotScanned, ext:fluid