typo3 - TYPO3 为控制器操作设置模板视图
问题描述
我想将列表操作的视图模板用于我的 listByYear 操作。我试过 setTemplatePathAndFilename 没有成功。它仍然找不到模板。
抱歉,未找到请求的视图。
技术原因是:没有找到模板。无法为类“XXX\YYY\Controller\EventController”中的操作“listByYear”解析视图。
/**
* action listByYear
* @param \XXX\YYY\Domain\Model\Event $event
*
* @return void
*/
public function listByYearAction(\XXX\YYY\Domain\Model\Event $event)
{
$date = $event->getStart();
$events = $this->eventRepository->findByYear($date->format('Y'));
$this->view->setTemplatePathAndFilename(
'typo3conf/ext/' .
$this->request->getControllerExtensionKey() .
'/Resources/Private/Templates/Event/List.html'
);
debug('typo3conf/ext/' .
$this->request->getControllerExtensionKey() .
'/Resources/Private/Templates/Event/List.html');
$this->view->assign('events', $events);
}
如何让它使用列表的模板?
解决方案
很简短的回答是,你不能。在您的操作触发之前,视图已经被初始化并被要求解析模板,实际上早在您可以影响它将查找的模板文件名的任何点之前。
按照惯例将被解析的模板文件必须始终存在。这就是允许您的控制器操作呈现的原因。然后,您可以,但我不建议您这样做,通过设置模板名称(操作)来覆盖模板文件。
总体建议:使用默认的模板命名逻辑。如果您需要重用模板,请考虑重构您需要重用的模板部分,将它们放在部分模板中。
推荐阅读
- python-3.x - 计数矢量化器和拟合函数的 Python 列表错误
- tensorflow - Tnesorflow:STFT 的梯度误差
- javascript - 如何在新的 window.open 上启动 jquery 并避免“Uncaught ReferenceError: $ is not defined”错误?
- reactjs - “警告:无法在未安装的组件上调用 setState(或 forceUpdate)”,但组件没有 setState?
- ios - 资产交换流程改变了吗?
- javascript - 使用 mocha webdriver 在浏览器中测试时出现“ReferenceError:文档未定义”
- python - python请求对url进行编码
- reactjs - React Props 仅在 componentWillReceiveProps 中可用
- php - 如何将相同的数据传递给laravel中的多个视图
- r - 从列中合并数据框