2013-01-12 92 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() 
        )); 
     }