2016-12-31 99 views
0

我必须使用的loggedIn用户数据在视图因此在AppControllerbeforeRender函数创建变量AUTH_USER致命错误:调用一个成员函数用户()上布尔

82  public function beforeRender(Event $event) 
83  { 
84   if ($this->Auth->user('id')) { 
85   $this->set('AUTH_USER', $this->Auth->user()); 
86   } 
87   ... 
88   ... 
89  } 

每当有一个错误,而不是显示实际的错误它显示以下错误而不样式格式

Fatal error: Uncaught Error: Call to a member function user() on boolean in /path_to_app/src/Controller/AppController.php:84 
Stack trace: #0 /path_to_app/src/Controller/ErrorController.php(54): App\Controller\AppController->beforeRender(Object(Cake\Event\Event)) 
#1 /path_to_app/vendor/cakephp/cakephp/src/Event/EventManager.php(422): App\Controller\ErrorController->beforeRender(Object(Cake\Event\Event)) 
#2 /path_to_app/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event)) 
#3 /path_to_app/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event)) 
#4 /path_to_app/vendor/cakephp/cakephp/src/Controller/ in /path_to_app/src/Controller/AppController.php on line 84 

卸下线84 - 86显示实际的错误

Edit 2

代码验证部件在AppController中初始化initialize()

我写了下面的代码来加载AUTH组件。

$this->loadComponent('Auth', [ 
    'authenticate' => [ 
     'Form' => [ 
     'userModel' => 'Admins', 
      'fields' => [ 
       'username' => 'email', 
       'password' => 'password' 
      ] 
     ] 
     ], 
     'loginAction' => [ 
     'controller' => 'Admins', 
     'action' => 'index' 
     ], 
     'loginRedirect' => [ 
     'controller' => 'Admins', 
     'action' => 'contentList' 
     ], 
     'authError' => 'Did you really think you are allowed to see that?', 
     'logoutAction' => [ 
     'controller' => 'Pages', 
     'action' => 'home' 
     ] 
]); 
+0

加载组件时,您缺少''''。 – doonot

回答

3

我有同样的错误,如果你加入这行到beforeRender()它应该工作:

$this->loadComponent('Auth'); 

这可能是因为你没有正确初始化该组件在initialize()功能。

+0

如果用户的数据已经存在'Auth'会话中。为什么要从数据库中再次获取?这可能是脆弱的,因为在获取用户的记录时,密码和其他隐藏数据也将被检索。另外,由于代码位于'AppController'中,因此每次发送到服务器的http请求都将检索登录用户数据。 –

+0

即使在我根据您的答案更改我的代码后,仍然存在错误。错误在线'if(!empty($ this-> Auth-> user('id')))'。 –

+0

您是否正在加载initialize()函数中的“Auth”组件? – doonot

0

您还没有给出要检查的if语句的正确标识。您必须通过函数的参数发送登录用户的ID,然后在if语句中检查该ID。

+0

甚至删除if语句在$ this-> set('AUTHUSER',$ this-> Auth-> user())时出错。 –

+0

即使用户登录时也会发生此错误吗? – Aarrbee

+1

是的,登录后也出现错误 –

相关问题