在最近的一个多语言项目中,我使用Twig来存储不同语言的电子邮件模板。目前,我在文件名中使用各自的语言命名模板(例如 在我的控制器中通过串联email_en.txt.twig
和加载它们(示例改编自 Symfony2 文档):
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 链或工厂的情况下(通过某种黑色树枝/symfony/配置/约定/任何魔法)基于请求语言渲染树枝模板?
使用事件侦听器进行kernel.view
(文档)并更改其中返回的模板。
你可以在FOSUserBundle的ViewResponseListener中找到一些灵感。