2016-04-19 2 views
3

Привет я работаю на CakePHP 3 проекта ..CakePHP3 получить пользователя в default.ctp

Я хочу, чтобы отобразить имя пользователя зарегистрированного пользователя из default.ctp поэтому я попытался это:

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

она не работает, и я нашел другое решение, которым поведать поставить текущего пользователя в сессии из AppController он не работает слишком это он:

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

и default.ctp:

<?=$username?> 

Может кто-нибудь мне помочь?

ответ

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); 
    }?> 

попробовать это надежда, что помощь в ..

+0

Я пробовал, и он работает спасибо –

+0

:) его нормально ... !! –

+1

Вы не должны получать данные авторизованного пользователя, используя сеанс, подобный этому. Вы должны использовать компонент Auth, как показано в ответе Burzum. Избегайте использования приведенного здесь подхода сеанса! – drmonkeyninja

1

Вам может понадобиться включить - use Cake\View\Helper\SessionHelper ; // в контроллере приложения

Вы получили правильный фрагмент code--

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

и, очевидно, эти значения будут доступны в ваших файлах макетов представлений.

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

Что вы не можете получить здесь?

+0

undefinde variable '$ username' –

+0

попробуйте проверить значение $ user, что вы там получаете? – Abhishek

+0

Я пытался отлаживать '$ user', но кажется, что он показывает nothnig –

6

Доступ к сессии неправильный подход. Система auth в CakePHP может обрабатывать различные источники пользователя, а сеанс не будет работать для систем без аутентификации.

Таким образом, правильный подход заключается в том, чтобы получить пользователя от абстрактной системы auth и не, читая его непосредственно из сеанса. Также сеансовый подход будет испорчен в случае изменения ключа сеанса.

В AppController просто добавьте это:

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

Затем доступ к $ пользователя вар в представлении. My plugin даже содержит a helper для решения общих задач пользовательских данных в представлении.

+0

Спасибо, это помогло мне в моем проекте не только передать' $ user' –

Смежные вопросы