CakePHP проверяет, зарегистрирован ли пользователь внутри представления

У меня есть следующий код:

<?php if (!$this->Auth->user()) { echo $this->element('header'); } else { echo $this->element('header-bar'); } ?> 

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

 Notice (8): Undefined property: View::$Auth [APP/views/layouts/page.ctp, line 17] Fatal error: Call to a member function user() on a non-object in /Users/cameron/Sites/thehive/app/views/layouts/page.ctp on line 17 

Как это исправить? благодаря

Примечание. Также ознакомьтесь с ответом meotimdihia ниже . У него много оборотов.


Компонент Auth предназначен для использования в контроллере. Вы хотите проверить авторизацию в контроллере, а затем установить переменную для представления, например $this->set('authUser', $this->Auth->user()); , Тогда, на ваш взгляд, вы можете:

 if (!$authUser) { echo $this->element('header'); } 

Если вы хотите, чтобы это было сделано автоматически для всех методов контроллера, вы можете изучить модификацию cake/libs/controller/app_controller.php чтобы он включал компонент Auth.

Вам не нужно делать $this->set(compact('authUser')); используйте это только в представлении:

 if ($this->Session->read('Auth.User')){ // do something } 

Начиная с CakePHP 2.x:

 <?php if (AuthComponent::user('id')): ?> Logged in as <?= AuthComponent::user('name') ?> <?php endif; ?> 

Чтобы обобщить ответы на этой странице, оцените один из следующих вариантов, в зависимости от того, какую версию CakePHP вы используете:

Для версии 1.x

 $this->Session->read('Auth.User') 

Для версии 2.x

 AuthComponent::user('id') 

Fore версия 3.x

 $this->request->session()->read('Auth.User.id') 

Это работает в Cakephp 3+ (juts изменить: «Auth.User.username» в соответствии с вашими данными сеанса)

 <?php if (is_null($this->request->session()->read('Auth.User.username'))) { echo "....logged out"; } else { echo "You are Logged in As " . $this->request->session()->read('Auth.User.username'); } ?> 

это было время, когда я использовал CakePHP, но насколько я помню, CakePHP не поддерживает Auth in View. Конечно, вы можете установить переменную в контроллере, чтобы использовать ее в представлении

 <? class AppController { .... function beforeFilter(){ .... $this->set('auth',$this->Auth); } .... } ?> 

а затем использовать его в представлении, подобном этому

 $auth->.... 

или вы можете использовать AuthHelper, написанный Ritesh Agrawal

http://bakery.cakephp.org/articles/ragrawal/2008/07/29/authhelper

КСТАТИ

Я думаю, что если речь идет только о проверке, если кто-то зарегистрирован в ответе @ webbiedave, то лучше, чем стиль MVC.

Тем не менее, если вам нужно получить доступ к пользовательским данным, просто извлеките userinfo из компонента Auth и установите его в контроллере, когда я показал вам и использовал его в представлении

С уважением

Попробуй это

 class AppController extends Controller{ $this->user = false; public function beforeFilter(){ $this->user = $this->Auth->user(); } public function beforeRender(){ $this->set('logged_user',$this->user); } } 

Теперь вы можете проверить $ logged_user в представлении как

 if($logged_user){ // users logged in $logged_user have all the details }else{ // not logged in } 

в cakephp 3 вы можете проверить сеанс аутентификации в представлении, подобном этому

 if($this->request->Session()->read('Auth.User')){ //do when login } else{ //do not login } 

Вам нужно установить данные пользователя из контроллера, предпочтительно AppController, который наследуется всеми контроллерами на вашем сайте. Создайте / исправьте app_controller.php, чтобы beforeFilter(); это beforeFilter(); метод.

 <?php class AppController extends Controller { function beforeFilter() { $user = $this->Auth->user(); $this->set(compact('user')); } 

Это установит переменную с именем $user в представления, которые будут пустыми, если пользователь не войдет в систему или не будет содержать свои данные, если они есть.

 //In the views (or layout) $session->check('Auth.User.id'); //In controller $this->Auth->User('id');