2010-06-14 5 views
4

J'ai une application qui reçoit une demande d'une autre application. Il détecte une valeur sur la chaîne de requête, vérifie cette valeur par rapport à une valeur mise en cache et, s'ils ne correspondent pas, il doit effacer son cache et recharger la page (en établissant un nouveau cache). Malheureusement, je n'arrive pas à trouver un moyen de dire à Symfony de rediriger vers la page actuelle exactement dans le même format (protocole, chemin URI, chaîne de requête, etc.). Qu'est-ce que je rate? Tout cela se passe dans un filtre sur isFirstCall().Symfony peut-il simplement recharger une demande de page?

Merci.

Répondre

4

Nous l'avons fait dans un filtre.

Il est un peu hacky mais voici un exemple de faire la redirection dans un filtre ... vous devrez faire le test du cache ... vous

class invalidateCacheFilter extends sfFilter { 

    public function execute($filterChain) { 

    $redirect=true; 
    if($redirect===true) 
    { 
     $request = $this->getContext()->getRequest(); 
     /** 
     This is the hacky bit. I am pretty sure we can do this in the request object, 
     but we needed to get it done quickly and this is exactly what needed to happen. 
     */ 
     header("location: ".$request->getUri()); 
     exit(); 
    } 
    $filterChain->execute(); 
    } 
} 
+0

comme vous, je ne pouvais pas trouver un moyen de faire l'objet de requête faire directement lors de l'exécution encore les filtres redirect (ce qui exclut l'utilisation de 'avant () 'dans mon cas). La méthode 'getUri()' a fait exactement ce dont j'avais besoin car elle inclut toutes les informations pertinentes sur la requête. Quand je l'ai vu pour la première fois, j'avais peur qu'il n'inclue pas la chaîne de requête. Merci. –

1

Si vous voulez redirigez, vous pouvez faire comme ceci:

if (true===$redirect) 
{ 
    return $this->getContext()->getController()->redirect($request->getUri()); 
} 
+0

Pour être exact dans un filtre, vous devrez utiliser '$ this-> getContext() -> getController() -> redirect();' –

+0

@MichalTrojanowski, merci. (J'ai collé la version originale de mon contrôleur.) –

Questions connexes