2013-09-25 44 views
1

在最近的多語言項目中,我使用Twig存儲不同語言的電子郵件模板。目前,我用的文件名(其各自的語言,如email_en.txt.twig命名模板和加載這些通過串聯在我的控制器(例如改編自Symfony2 documentation):我可以根據請求語言加載小枝模板嗎?

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

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

現在我知道我可以使用一個專門的服務或工廠以更加安全的方式處理這種邏輯,但我很想知道這個問題是否已經被某人解決了,以及它是如何解決的。

爲了避免這個問題關閉,我會改寫我的問題(希望更好)。是否可以根據請求語言呈現樹枝模板而不使用if鏈或工廠(通過某種黑色樹枝/ sy mfony/configuration/convention /任何魔術)?

+0

沒有具體的編程問題。 –

+0

@Pazi我更新了這個問題。 – nietonfir

回答

2

對於kernel.viewdocumentation)使用event listener並在那裏更改返回的模板。

您可以在FOSUserBundle的ViewResponseListener中找到靈感。

+0

一開始似乎是一個好主意,但在渲染模板之後,我不想離開請求,而是使用渲染模板(請參閱問題中的更新示例)。 – nietonfir