【问题标题】:Can I load a Twig template based on the request language?我可以根据请求语言加载 Twig 模板吗?
【发布时间】:2013-09-25 09:17:08
【问题描述】:

在最近的一个多语言项目中,我使用 Twig 存储不同语言的电子邮件模板。目前我在文件名中用它们各自的语言命名模板(例如email_en.txt.twig,并在我的控制器中通过连接加载它们(示例改编自Symfony2 documentation):

public function indexAction($name, Request $request)
{
    $message = \Swift_Message::newInstance()
        ->setSubject('Hello Email')
        ->setFrom('send@example.com')
        ->setTo('recipient@example.com')
        ->setBody(
            $this->renderView(
                'HelloBundle:Hello:email_" . $request->getLocale() . ".txt.twig',
                array('name' => $name)
            )
        )
    ;
    $this->get('mailer')->send($message);

    return $this->render(...);
}

现在我知道我可以使用专门的服务或工厂以更明智的方式处理这种逻辑,但我很想知道这个问题是否已经有人解决过,以及它是如何解决的。

[编辑] 为避免关闭此问题,我将重新表述我的问题(希望更好)。是否可以在不使用 if 链或工厂的情况下根据请求语言呈现 twig 模板(通过某种黑色 twig/symfony/configuration/convention/whatever 魔法)?

【问题讨论】:

  • 没有具体的编程问题..
  • @Pazi 我更新了问题。

标签: php symfony twig


【解决方案1】:

对kernel.view (documentation) 使用event listener 并在其中更改返回的模板。

您可以在 FOSUserBundle 的ViewResponseListener 中找到一些灵感。

【讨论】:

  • 一开始似乎是个好主意,但在呈现模板后我不想离开请求而是使用呈现的模板(请参阅问题中的更新示例)。
猜你喜欢
  • 1970-01-01
  • 2019-11-14
  • 2011-01-08
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
相关资源
最近更新 更多