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
Как это исправить? Благодаря
Ответы
Ответ 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');
}