2012-11-09 4 views
2

J'ai une fonction dans mon module.php avec la fonction suivante qui est appelée avant que tout le reste commence à charger, elle vérifie que l'utilisateur est connecté mais j'en ai besoin pour rediriger vers la page de connexion Si l'utilisateur n'est pas connecté, je pourrais simplement utiliser "header" mais je veux apprendre la façon de faire "Zend".Zend Framework 2, Module Redirect

public function preDispatch($e) 
{ 
    if (!isset($_SESSION)) session_start(); 

    $sm = $e->getApplication()->getServiceManager(); 
    $adapters = $sm->get('dbAdapters'); 
    if (!isset($_SESSION['auth'])) $_SESSION['auth'] = new MyAuth($adapters[1]); 

    if ($_SESSION['auth']->IsValid()) 
    { 
     echo 'Valid<br />'; 
    } 
    else 
    { 
     $e->getControllerClass()->redirect()->toRoute('login-success'); 
     echo '!Valid<br />'; 
     //REDIRECT TO LOGIN PAGE HERE!!!!! 
    } 
} 

Répondre

8

C'est précisément ce que vous posiez sur:

 //REDIRECT TO LOGIN PAGE HERE!!!!! 

     /** 
     * grab Controller instance from event and use the native redirect plugin 
     */ 
     $controller = $e->getTarget(); 
     $controller->plugin('redirect')->toUrl('/logout?' . $query); 

     /** 
     * optionally stop event propagation and return FALSE 
     */ 
     $e->stopPropagation(); 
     return FALSE; 

Cela dit, vous voudrez peut-être revenir à l'aide de la session première. Exemple (suppose que vous avez configuré un authAdapter personnalisé):

public function checkSession($e) 
{ 
    $controller = $e->getTarget(); // grab Controller instance from event 

    $app   = $e->getApplication(); 
    $locator  = $app->getServiceManager(); 
    if ($controller instanceof LogoutController) return; 
    $authService = $locator->get('ds_auth_service'); 
    $authAdapter = $locator->get('ds_auth_adapter'); 

    /* 
    * try to authenticate 
    */ 
    if (!$authService->hasIdentity()){ 
     $result = $authService->authenticate($authAdapter); 
     if ($authService->hasIdentity()) { 
      $this->getEventManager()->trigger('authenticate', $this, array('result' => $result)); 
     } 
    } 

    /* 
    * If we are not in an exempt controller and no valid identity, redirect 
    */ 
    $isExempt = $controller instanceof \Application\Controller\LogoutController; 
    if (!$isExempt && !$authService->hasIdentity()) { 
     $query = http_build_query($result->getMessages()); 
     $controller->plugin('redirect')->toUrl('/logout?' . $query); 
     $e->stopPropagation(); 
     return FALSE; 
    } 

    // User is logged in 
    return TRUE; 

} 
+1

Je reçois cette erreur et je l'ai essayé, y compris les fichiers neccessary sans succès, appel à la méthode non définie Zend \ Mvc \ Application :: plug-in() – rossedlin

+0

Oh et merci pour votre réponse :) – rossedlin