Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 BE上下文中的流体独立视图_Typo3_Fluid_Typo3 8.7.x - Fatal编程技术网

Typo3 BE上下文中的流体独立视图

Typo3 BE上下文中的流体独立视图,typo3,fluid,typo3-8.7.x,Typo3,Fluid,Typo3 8.7.x,如果您处于BE或CLI上下文中(例如,通过extbase command controller任务发送电子邮件),则以下操作最多可使用7个LTS来呈现流体独立视图: $view = $this->objectManager->get(StandaloneView::class); $view->setTemplatePathAndFilename('/Absolute/Path/To/Template.html'); $view->setFormat('html'); $

如果您处于BE或CLI上下文中(例如,通过extbase command controller任务发送电子邮件),则以下操作最多可使用7个LTS来呈现流体独立视图:

$view = $this->objectManager->get(StandaloneView::class);
$view->setTemplatePathAndFilename('/Absolute/Path/To/Template.html');
$view->setFormat('html');
$view->getRequest()->setControllerExtensionName('Myextensionname');
return trim($view->render());
但是,在8 LTS中,这会引发以下异常:

已尝试以.html格式解析控制器操作“标准->索引”的模板文件,但没有包含预期模板文件的路径…未配置任何路径

正如在的wiki页面中所建议的,我尝试为视图设置布局和部分根路径:

$view->setLayoutRootPaths(['EXT:Myextensionname/Resources/Private/Layouts/']);
$view->setPartialRootPaths(['EXT:Myextensionname/Resources/Private/Partials/']);
然而,这不会起作用

再深入一点,我可以想象,必须设置控制器和操作名称,例如通过设置控制器上下文,但这似乎不是一个可靠的解决方案,因为多个其他类实例都与之关联


在8 LTS中呈现流体独立视图的正确方法是什么?

这里是我们当前Web项目中的一个示例,我们希望在后端上下文中基于TYPO3 8.7中的流体HTML显示一个简单的注释

protected function renderMarkup(): string
    {
        $standaloneView = GeneralUtility::makeInstance(StandaloneView::class);
               $standaloneView->getRequest()->setControllerExtensionName('in2template');
        $templatePathAndFile = 'EXT:in2template/Resources/Private/Templates/Tca/ToolbarNoteEmptyFields.html';
$standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templatePathAndFile));
        $standaloneView->assign('toolbar', 'toolbarstuff');
        return $standaloneView->render();
    }

下面是我们当前Web项目中的一个示例,我们希望在后端上下文中基于TYPO3 8.7中的流体HTML显示一个简单的注释

protected function renderMarkup(): string
    {
        $standaloneView = GeneralUtility::makeInstance(StandaloneView::class);
               $standaloneView->getRequest()->setControllerExtensionName('in2template');
        $templatePathAndFile = 'EXT:in2template/Resources/Private/Templates/Tca/ToolbarNoteEmptyFields.html';
$standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templatePathAndFile));
        $standaloneView->assign('toolbar', 'toolbarstuff');
        return $standaloneView->render();
    }

在我的8.7扩展中,我使用以下代码获得StandaloneView:

$extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
/** @var StandaloneView $emailView */
$emailView = $this->objectManager->get(StandaloneView::class);
$emailView->getRequest()->setControllerExtensionName($controllerExtensionName);
$emailView->getRequest()->setPluginName($pluginName);
$emailView->getRequest()->setControllerName($controllerName);
$emailView->setTemplateRootPaths($extbaseFrameworkConfiguration['view']['templateRootPaths']);
$emailView->setLayoutRootPaths($extbaseFrameworkConfiguration['view']['layoutRootPaths']);
$emailView->setPartialRootPaths($extbaseFrameworkConfiguration['view']['partialRootPaths']);
$emailView->setTemplate('Email/' . ucfirst($templateName));
$emailView->assignMultiple($variables);
$emailBody = $emailView->render();

在我的函数中,我将
$controllerExtensionName
$pluginName
$controllerName
作为默认值的参数,以便其他控制器/插件也可以使用此函数。

在我的8.7扩展中,我使用以下代码来获取标准视图:

$extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
/** @var StandaloneView $emailView */
$emailView = $this->objectManager->get(StandaloneView::class);
$emailView->getRequest()->setControllerExtensionName($controllerExtensionName);
$emailView->getRequest()->setPluginName($pluginName);
$emailView->getRequest()->setControllerName($controllerName);
$emailView->setTemplateRootPaths($extbaseFrameworkConfiguration['view']['templateRootPaths']);
$emailView->setLayoutRootPaths($extbaseFrameworkConfiguration['view']['layoutRootPaths']);
$emailView->setPartialRootPaths($extbaseFrameworkConfiguration['view']['partialRootPaths']);
$emailView->setTemplate('Email/' . ucfirst($templateName));
$emailView->assignMultiple($variables);
$emailBody = $emailView->render();

在我的函数中,我将
$controllerExtensionName
$pluginName
$controllerName
作为默认值的参数,以便其他控制器/插件也可以使用此函数。

StandaloneView喜欢接收所有模板路径(部分、模板和布局根路径)因此,如果您还没有提供所有这些,您应该这样做。原因是命名“Standalone”指的是视图既不绑定到特定的MVC操作,也不绑定到特定的扩展上下文


这就是说,如果您使用8.7.5,您可能会遇到一个回归问题,而这个问题将由解决,因此在您进行重大重构之前,可能值得检查一下。从技术上讲,StandaloneView可以像带有扩展上下文的TemplateView一样操作,只是它不是官方支持的行为,Type3可能不会始终应用您期望的所有上下文。

StandaloneView喜欢接收所有模板路径(部分路径、模板路径和布局根路径),因此如果您尚未提供所有路径,你应该这样做。原因是命名“Standalone”指的是视图既不绑定到特定的MVC操作,也不绑定到特定的扩展上下文


这就是说,如果您使用8.7.5,您可能会遇到一个回归问题,而这个问题将由解决,因此在您进行重大重构之前,可能值得检查一下。从技术上讲,StandaloneView可以像一个带有扩展上下文的TemplateView一样运行,只是它不是官方支持的行为,TYPO3可能不会始终应用您期望的所有上下文。

我刚刚更新到8.7.6,但在我的情况下,它似乎不是一个回归。再次测试,并伴随着路径问题,这确实是一个回归。我刚刚更新到8.7.6,但在我的情况下,这似乎不是一个回归。再次测试,连同路径问题,这确实是一个回归。