2011-02-02 12 views
29

ottengo il seguente errore quando si cerca di effettuare il logout della mia CakePHP app:CakePHP: chiamata a una setFlash funzione membro() su un non-oggetto

Notice (8): Undefined property: UsersController::$Session [APP/controllers/users_controller.php, line 75] 
Fatal error: Call to a member function setFlash() on a non-object in /Users/cameron/Sites/cakeapp/app/controllers/users_controller.php on line 75 

Questo è il codice per le linee 74, 75 e 76 :

function logout() { 
    $this->Session->setFlash('Good-Bye'); 
    $this->redirect($this->Auth->logout()); 
} 
+0

Non capisco l'errore. – Cameron

+16

Se ci fosse un badge per "il commento più inutile", # 1 prenderà in caso di dubbio :-P volentieri la risposta giusta è sotto. – Flupkear

risposta

66

Sembra che il componente Sessione non sia stato caricato nel controller Utenti.

Il componente di sessione deve essere caricato per impostazione predefinita, ma se è stato impostato l'array di componenti in AppController, questo sovrascriverà i valori predefiniti.

Questo significa che se si dispone di

var $components = array(); 

nel vostro AppController, assicurarsi che il componente Session è incluso lì:

var $components = array('Session'); 

In alternativa, è possibile caricare il componente Session nel controller utenti se non vuoi usarlo per tutta l'app.

+2

Grazie :) Pensavo che Session fosse un aiuto e che fosse incluso invece di un componente! – Cameron

+0

CakePHP fornisce sia: SessionComponent per l'utilizzo della sessione nel controller, sia SessionHelper per utilizzarlo nelle viste. – dhofstet

+4

In realtà, c'è anche un aiutante di sessione. È necessario utilizzare il componente Session quando si desidera eseguire operazioni con la sessione nel controller e si utilizza l'helper Session per eseguire operazioni con la sessione nella vista. Se stai impostando un messaggio flash con il componente Session nel controller, dovrai utilizzare l'helper Session per visualizzarlo nella visualizzazione. – mtnorthrop

Problemi correlati