2015-12-03 2 views
2

J'utilise CakePHP 2.6.7 et copié le code pour montrer les messages flash d'un contrôleur à un autre, mais cela ne fonctionne pas dans le second contrôleur.Session-> flash ne montre pas le message de session dans CakePHP

En AdminsController:

function login() { 
     $this->loadModel('Admin'); 
     $this->layout = "admin-login"; 
     // if already logged in check this step 
     if ($this->Auth->loggedIn()) { 
      return $this->redirect('dashboard'); //(array('action' => 'deshboard')); 
     } 
     // after submit login form check this step 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       // pr($this->Auth); exit; 
       if ($this->Auth->user('status') == 'active') { 
        // user is activated 
        $this->Admin->id = $this->Auth->user('id'); 
        $this->Admin->saveField("loggedIn", 1); 
        return $this->redirect($this->Auth->redirectUrl()); 
       } else { 
        // user is not activated 
        // log the user out 
        $msg = '<div class="alert alert-error"> 
          <button type="button" class="close" data-dismiss="alert">×</button> 
          <strong>You are blocked, Contact with Adminstrator</strong> 
         </div>'; 
        $this->Session->setFlash($msg); 
        return $this->redirect($this->Auth->logout()); 
       } 
      } else { 
       $msg = '<div class="alert alert-error"> 
          <button type="button" class="close" data-dismiss="alert">×</button> 
          <strong>Incorrect email/password combination. Try Again</strong> 
         </div>'; 
       $this->Session->setFlash($msg); 
      } 
     } 
    } 

Dans les admins/login.ctp:

<?php echo $this->Session->flash(); ?> 

Quand je mauvais type e-mail ou mot de passe, il affiche le message d'erreur. preuve: http://jegeachi.com/admins/login

Mais la tâche SAME ne peut pas être effectuée dans ResellersController. Voici le code du contrôleur:

function login() { 
    $this->layout = 'public-login'; 
    $this->loadModel('Reseller'); 
     // if already logged in check this step 
    if ($this->Auth->loggedIn()) { 
      return $this->redirect('profile'); //(array('action' => 'deshboard')); 
     } 
     // after submit login form check this step 
     if ($this->request->is('post')) { 

      if ($this->Auth->login()) { 

       return $this->redirect($this->Auth->redirectUrl()); 
      } else { 

       $msg = '<div class="alert alert-error"> 
       <button type="button" class="close" data-dismiss="alert">×</button> 
       <strong>Incorrect email/password combination. Try Again</strong> 
      </div>'; 
      $this->Session->setFlash($msg); 

     } 
    } 
} 

dans Revendeurs/login.ctp:

<?php echo $this->Session->flash(); ?> 

Lorsque la connexion a échoué en raison d'une mauvaise e-mail ou mot de passe, il n'est pas montré.

preuve: http://jegeachi.com/resellers/login

Son problème étrange et câblé. Le même code fonctionne dans un contrôleur mais pas dans un autre. Une idée?

+0

J'utilise CakePHP 2.6.7 et la charge session dans les deux admins contrôleur et revendeurs contrôleur –

Répondre

3

Assurez-vous que vous n'utilisez pas déjà le message flash de session. Cela pourrait se produire si vous avez quelque chose dans votre app/View/Layouts/public-login.ctp de mise en page comme:

<?php $this->Session->flash(); ?> 

Ou quelque part dans vos blocs/Affichage.


Vérification de la sortie HTML, j'ai trouvé ce qui suit au lieu du message d'erreur prévu:

<div class="alert alert-danger display-hide"> 
     <button class="close" data-close="alert"></button> 
     <span> Enter Email and password. </span> 
    </div> 

Vérifiez votre rappel beforeRender() et assurez-vous que vous n'êtes pas flasher le message ci-dessus. Si vous l'êtes, il écrase le précédent.

+0

I vérifié et étrange est: je télécharge tous les fichiers dans mon PC local. Le message de la session est montré dans mon localhost. C'est vraiment frustrant. –

+0

Tout ce que je reçois maintenant est une page blanche avec le «mauvais» message. –

+0

Je viens d'essayer avec écho 'faux'; Sortie; pour tester. Maintenant, je modifie mon code comme ci-dessus. Maintenant, vous pouvez voir aucun message flash avec mot de passe email incorrect. –

1

Bonjour Je pense que vous avez oublié de l'écho de votre message de session s'il vous plaît écrire comme ci-dessous Dans votre fichier ctp

echo $this->Session->flash();