Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Примечание: Также проверьте meotimdihia ответ ниже. Он получил лот для upvotes.


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

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

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

Ответ 2

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

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

Ответ 3

По состоянию на CakePHP 2.x:

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

Ответ 4

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

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

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

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

AuthComponent::user('id')

Перед версией 3.x

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

Ответ 5

Это работает в 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'); 

}

?>

Ответ 6

было время, когда я использовал 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

BTW

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

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

Привет

Ответ 7

Попробуйте это

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
}

Ответ 8

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

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

Ответ 9

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

<?php
class AppController extends Controller {

function beforeFilter() {
    $user = $this->Auth->user();
    $this->set(compact('user'));
}

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

Ответ 10

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

//In controller
$this->Auth->User('id'); 

Ответ 11

Я нашел кое-что заслуживающее упоминания, в CakePHP 3.x обработчик сессии устарел,

если мы хотим получить доступ к сеансу, мы можем сделать это через обработчик запросов. мы должны использовать

<?php
   // For CakePHP 3.x to access all user information
   $this->request->session()->read('Auth.User');

  // For CakePHP 3.x to check session
  if($this->request->session()->read('Auth.User.id')) {

  }
?>

Ответ 12

Если это кому-то поможет в сеансе cakephp версии 3.7.8, он был исключен из getSession, чтобы обновить комментарий Ли Нильсена.

if (is_null($this->request->getSession()->read('Auth.User.username'))) {

echo "....logged out";

} else {

echo "You are Logged in As " . $this->request->getSession()->read('Auth.User.username'); 

}