使用Extbase在Typo3中渲染部分TemplateView

时间:2016-01-29 08:19:29

标签: ajax typo3 extbase

我想通过Ajax在Extbase Controller中延迟加载几个PartialTemplates。 因此,我发现以下脚本只渲染部分,但它在我的上下文中不起作用:

 private function renderPartial($partialName='', $data = array()){
    if($partialName==''){
        throw new \TYPO3\CMS\Extbase\Mvc\Exception\RequiredArgumentMissingException('The Partial name must be defined.', 123456789);
    }
    $this->templateView = $this->objectManager->create('TYPO3\CMS\Fluid\View\TemplateView');
    $res = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($this->controllerContext->getRequest()->getControllerExtensionKey()) . 'Resources/Private/';
    $this->templateView->setLayoutRootPath($res);
    $this->templateView->setPartialRootPath($res . 'Partials/');
    $this->templateView->setRenderingContext($this->objectManager->create('TYPO3\CMS\Fluid\Core\Rendering\RenderingContext'));
    $this->templateView->setControllerContext($this->controllerContext);

    return $this->templateView->renderPartial($partialName, Null, $data);
}

这会导致以下错误: 致命错误:在第281行的/var/www/html/typo3_src-7.6.0/typo3/sysext/fluid/Classes/View/AbstractTemplateView.php中调用非对象的__clone方法

我为此Goolge并发现很多帖子都有同样的问题。我该怎么做才能使这个工作。使用StandaloneView和setTemplatePathAndFilename()的解决方法效果很好。是否可以在没有布局/部分的情况下使用部分?

编辑: DebugInfo

我添加了一些调试信息和Controller Action ......

public function searchAction(\PCON\Avm\Domain\Model\DemandSearch $demandSearch = NULL) {

    //GlobalSearch
    if($demandSearch != NULL) {
        $searchResult = $this->demandSearchRepository->findDemanded($demandSearch);
        $this->view->assign('searchResult', $searchResult);
    }

    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->controllerContext);
    $this->templateView = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\TemplateView');
    $res = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($this->controllerContext->getRequest()->getControllerExtensionKey()) . 'Resources/Private/';
    $this->templateView->setLayoutRootPath($res);
    $this->templateView->setPartialRootPath($res . 'Partials/');
    $this->templateView->setRenderingContext($this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContext'));
    $this->templateView->setControllerContext($this->controllerContext);
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->templateView);
    return $this->templateView->renderPartial('Search/SearchForm.html', Null, array('searchResult'=>$searchResult));
}

我不认为这是一个AJAX问题(由PageNum定义)。 如果我在没有AJAX的情况下调用控制器Action,则会出现相同的错误...

1 个答案:

答案 0 :(得分:0)

你不能在StandaloneView中使用来自extbase / php的renderPartial()或renderSection()。它是一个缺失的功能,可能无法在TYPO3 7.6及更低版本中实现。请参阅此任务:https://forge.typo3.org/issues/54509

但是,您可以在Fluid中使用部分和部分。只需分配变量,然后使用

渲染模板
$this->templateView->render();

并使用Fluid模板中的partials和section。