2013-01-12 2 views
3

J'ai un modèle area.html.twig qui rend un autre modèle:Ignorer une exception dans le modèle Twig

//area.html.twig 
... 

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

... 

Est-il possible d'ignorer \ attraper une exception qui a été jeté par restricted.html.twig et juste rendre rien à la place?

+0

AFAIK il n'y a pas moyen d'attraper des exceptions dans Brindille. De toute façon, vous ** ne devriez pas ** gérer les exceptions en frontend. Vous devez le gérer dans votre action. P.S. Essayez-vous de rendre le modèle? Vous devriez 'render' action du contrôleur. Voulez-vous dire «inclure»? –

+0

Je rends l'action d'un contrôleur. Cette action est uniquement restituée à certains utilisateurs et je voulais que l'action vérifie l'autorisation et lève une exception si l'utilisateur n'est pas autorisé à la voir. Je ne peux pas vérifier le modèle lui-même car ce n'est pas juste un contrôle 'is_granted'. Je veux qu'il lève une exception car il est aussi utilisé sous d'autres formes (autonome, ajax, etc.) – tamir

+0

Avez-vous pensé à la mise en œuvre de votre propre filtre de brindilles ou de votre fonction, et de mettre toute la logique nécessaire là-bas? –

Répondre

7

Vous devez utiliser embedded controllers dans votre modèle:

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

mieux faire avec un itinéraire (de symfony security update):

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

Dans l'action que vous pouvez vérifier ce que vous voulez et retour une réponse/modèle vierge pour certaines circonstances.

Vous pouvez également envelopper votre rendu de modèle dans un essai & bloc catch et retourner un modèle d'erreur en cas d'exception brindille:

 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() 
        )); 
     } 
Questions connexes