2013-01-12 126 views
3

例外,我有一個模板area.html.twig呈現另一個模板:忽略嫩枝模板

//area.html.twig 
... 

{% render 'Acme:User:restricted.html.twig' %} 

... 

有沒有辦法忽略\趕上被restricted.html.twig拋出,只是渲染什麼,而不是一個例外?

+0

AFAIK有沒有辦法趕上嫩枝例外。無論如何,你**不應該**在前端處理異常。你必須在你的行動中處理它。附:你想渲染模板嗎?你應該渲染控制器的動作。你是不是指「包括」? –

+0

我在呈現控制器的操作。該行爲僅向某些用戶呈現,並且我希望該行爲檢查權限並在用戶未被授權查看時引發異常。我不能檢查模板本身,因爲它不僅僅是一個'is_granted'檢查..我希望它拋出一個異常,因爲它也用於其他形式(獨立,ajax等)。 – tamir

+0

你有沒有想過執行你自己的樹枝過濾器或功能,並把所有需要的邏輯? –

回答

7

您應該使用embedded controllers在您的模板:

{% render url('theactionroute', { 'data': data }) %} 

在操作,你可以檢查任何你想要的和返回:

{% render "yourBundle:Controller:action" with { 'data': data, } %} 

更好的路線(截至symfony security update)做到這一點某些情況下的空白回覆/模板。

你也可以換你的模板呈現在try & catch塊,並在樹枝異常的情況下返回一個錯誤模板:

 try { 
      $response = $this->render('yourBundle:Default:action.html.twig', 
             array('data' => $data)); 
     } catch (\Exception $exc) { 
      return $this->render('yourBundle:Default:error.html.twig', array(
         'message' => $exc->getMessage() 
        )); 
     }