我试图让某些按钮仅显示给某些用户类型,我在视图中的按钮周围添加了此代码:
<li><?php
if($this->Auth->user('role_id')==8){
echo $this->Html->link(__('New Consumer Product'), array('action' => 'add'));
}
?>
</li>
但是这只是给了我错误Error: AuthHelper could not be found.
所以我在AppController中添加了以下内容:
public $helpers = array('Auth');
然而,这只是给了我以下错误:
Helper class AuthHelper could not be found.
Error: An Internal Error Has Occurred.
这里发生了什么?当我将Auth帮助器添加到AppController中时,它是否有用?
我以前一直在我的UsersController中使用Auth而没有任何问题。
答案 0 :(得分:2)
您无法在视图中使用Auth。这只适用于控制器。
实际上有一些选项,比如为它设置/传递变量,但按照the manual
这是正确的方法 if((AuthComponent::user('role_id') == 8) {
...
}
答案 1 :(得分:1)
在AppControllers beforeRender()
或beforeFilter()
中,只需将活动用户设置为视图:
public function beforeRender() {
$this->set('userData', $this->Auth->user());
}
在视图中使用该变量。我更喜欢不对视图中的组件使用静态方法调用,它是组件的错误位置,而且由于紧耦合,静态调用也不是你想要引入的东西。
我的BzUtils plugin附带了一个可以处理这个变量的帮助器,或者可以配置为从会话中读取用户数据并提供一些方便的方法。
答案 2 :(得分:1)
in cake 3.x我发现唯一有用的是在AppController.php中设置变量:
public function beforeRender(\Cake\Event\Event $event) {
$this->set(['userData'=> $this->Auth->user(),
]);
}
关键区别在于您必须传递$ event ...
答案 3 :(得分:-3)
Auth是一个组件而不是帮助器。没有Auth助手。
您可以从以下命令
中读取Authenticated用户$user = $this->Session->read("Auth.User");