2016-04-19 12 views
3

Hallo ich auf CakePHP 3 Projekt arbeiten ..CakePHP3 erhalten Benutzer in default.ctp

ich Benutzernamen des angemeldeten Benutzers angezeigt werden soll aus default.ctp so habe ich versucht, dieses:

//in default.ctp 
$user = $this->Session->read('Auth.User'); 
    if(!empty($user)) { 
     echo 'Hi ', $user['user_name']; 
    } 

es funktioniert nicht, und ich andere Lösung weicht tell fand die aktuellen Benutzer in der Sitzung von AppController um es nicht funktionieren, das ist es:

// in AppController  
function beforeFilter(){ 
    $user = $this->Session->read('Auth.User'); 
    $this->set('username', $user['username']); 
} 

und in default.ctp:

<?=$username?> 

Kann mir jemand helfen?

Antwort

2
<?php $session = $this->request->session(); // less than 3.5 
     // $session = $this->request->getSession(); // 3.5 or more 
     $user_data = $session->read('Auth.User'); 
     if(!empty($user_data)){ 
      print_r($user_data); 
    }?> 

versuchen diese Hoffnung es Hilfe des ..

+0

Ich versuche es und es funktioniert danke –

+0

:) es ist ok ... !! –

+1

Sie sollten die Daten des autorisierten Benutzers nicht mit einer solchen Sitzung abrufen. Sie sollten die Auth-Komponente verwenden, wie in burzums Antwort gezeigt. Vermeiden Sie den hier gezeigten Session-Ansatz! – drmonkeyninja

1

Sie können müssen - use Cake\View\Helper\SessionHelper ; // in App Controller

Sie rechts Snippet code--

bekommen haben
// in AppController , this function being called before every request 
function beforeFilter(){ 
    $user = $this->request->session()->read('Auth.User'); 
    $this->set('username', $user['username']); 
} 

und natürlich sind diese Einstellwerte in den Layoutdateien Ihrer Ansichten verfügbar.

<?=$username?> or <?php echo $username ;?> // both are same. 

Was bekommen Sie hier nicht?

+0

undefinierte Variable '$ username' –

+0

Versuchen Sie, den Wert von $ user zu überprüfen, was Sie dort erhalten? – Abhishek

+0

Ich habe versucht, '$ user' zu debuggen, aber es scheint, dass es nothnig zeigt –

6

Zugriff auf die Sitzung ist die falsche Ansatz zu diesem. Das Authentifizierungssystem in CakePHP kann verschiedene Quellen des Benutzers verarbeiten, und die Sitzung funktioniert nicht für statusfreie Authentifizierungssysteme, z. B..

So ist der richtige Ansatz, den Benutzer aus dem abstrahierten Auth-System und nicht lesen Sie es direkt aus der Sitzung. Auch der Sitzungsansatz wird in dem Fall versauen, in dem sich der Sitzungsschlüssel ändert.

Im AppController dies nur hinzufügen:

public function beforeRender() { 
    $this->set('user', $this->Auth->user()); 
} 

zugreifen dann die $ user var in der Ansicht. My plugin enthält sogar a helper, um mit allgemeinen Aufgaben der Benutzerdaten in der Ansicht umzugehen.

+0

Danke, das half mir in meinem Projekt, nicht nur' $ user' zu übergeben –

Verwandte Themen