TYPO3设置模板视图以执行控制器操作

时间:2018-09-11 09:14:10

标签: typo3

我想将list动作的视图模板用于listByYear动作。我尝试setTemplatePathAndFilename失败。它仍然找不到模板。

  

抱歉,找不到所需的视图。

     

技术原因是:未找到模板。视图无法   解决类中的操作“ listByYear”   “ XXX \ YYY \ Controller \ EventController”。

/**
  * 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);

  }

如何使用列表模板?

1 个答案:

答案 0 :(得分:3)

非常简短的答案是,你不能。该视图将已经初始化,并要求在操作触发之前,实际上在任何可能影响模板查找文件名称的位置之前都需要解析模板。

按惯例可以解析的模板文件必须始终存在。这就是您的控制器动作可以呈现的原因。然后,您可以但不建议您通过设置模板名称(操作)来覆盖模板文件。

总体建议:使用默认的模板命名逻辑。如果需要重用模板,请考虑重构需要重用的模板部分,将它们放在部分模板中。