2009-05-29 6 views

Répondre

3

plus d'un an plus tard, je programme en ZF et j'ai cette solution pour votre problème. Voici ma fonction dans bootstrap qui détermine où l'utilisateur est connecté.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 

{

protected $_front; 

(...) 

protected function _initViewController() 
{ 
    (...) 

    $this->bootstrap('FrontController'); 
    $this->_front = $this->getResource('FrontController'); 

    (...) 
} 

protected function _initLogado() 
{ 
    $router = $this->_front->getRouter(); 
    $req = new Zend_Controller_Request_Http(); 
    $router->route($req); 
    $module = $req->getModuleName(); 

    $auth = Zend_Auth::getInstance(); 
    if ($auth->hasIdentity()) { 
     $this->_view->logado = (array) $auth->getIdentity(); 
    } else { 
     $this->_view->logado = NULL; 
     if ($module == 'admin') { 
      $response = new Zend_Controller_Response_Http(); 
      $response->setRedirect('/'); 
      $this->_front->setResponse($response); 
     } 
    } 
} 

}

0

La meilleure façon est probablement un Controller Plugin

Vous pouvez. ajoutez un hook routeShutdown() qui est appelé après le routage, mais avant la méthode d'action votre contrôleur est appelé Dans ce plugin vous pouvez ensuite vérifier les données de la requête ou chercher des permissions dans une ACL, ou simplement rediriger au hasard si c'est ce que vous voulez!

Le choix vous appartient!

EDIT: En relisant votre question, il semblerait que vous ne soyez même pas intéressé par l'itinéraire - utilisez routeStartup() comme premier point après l'amorçage pour injecter votre code.

0

Je saisirait le routeur du contrôleur avant et appeler sa méthode assemble() puis utilisez header() :)

Cordialement,

Rob ...

+0

J'ai effectivement essayé cela avant de poster. N'a pas fonctionné pour une raison quelconque (là où aucune valeur). Dois-je initialiser quelque chose dans le routeur avant d'utiliser la méthode d'assemblage? (merci) –

+0

Vous avez un simple exemple de code? –

0

Vous pouvez vérifier l'état sur « routeShutdown "méthode dans le plugin, puis utilisez $ this-> actionController -> _ helper-> redirector() pour rediriger;)

2

Redirection ne devrait vraiment pas être dans le fichier de démarrage ... Ce sera une nuit horrible de débogage pour le codeur qui finit coincé avec votre code dans quelques années. Utilisez un plugin de contrôleur frontal, un plugin Action Controller ou faites-le dans votre contrôleur d'action. En fin de compte une telle redirection devrait être évitée tout à fait ...

+2

Pourquoi le vote à la baisse? – balupton

+0

Pourquoi ne devrait-il pas être dans le fichier d'amorçage? S'il vous plaît élaborer. –

Questions connexes