Cakephp 在布局中使用php和auth

Cakephp 在布局中使用php和auth,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我正在使用auth组件,它工作正常。 但在我的默认布局之前的内容,我有一些菜单,这是不同的,如果用户登录。所以我想确定用户是否登录-通常我使用$this->Auth->user('id'),但$this->Auth在布局中不起作用(它只在使用Auth组件的控制器视图中起作用) 如何操作?在beforeRender()中,只需调用 $this->set('userData', $this->Auth->user()); 并将数据设置为视图,并在视图中执行检查 为了在布局中获取数

我正在使用auth组件,它工作正常。 但在我的默认布局之前的内容,我有一些菜单,这是不同的,如果用户登录。所以我想确定用户是否登录-通常我使用$this->Auth->user('id'),但$this->Auth在布局中不起作用(它只在使用Auth组件的控制器视图中起作用)

如何操作?

在beforeRender()中,只需调用

$this->set('userData', $this->Auth->user());
并将数据设置为视图,并在视图中执行检查

为了在布局中获取数据,应该在AppController中调用
beforeRender()
方法


通过会话传递它不是一个好主意。这可能不是通常的情况,但至少我更喜欢做一些可靠的事情:如果您使用会话,那么您的代码将在不使用会话(无状态身份验证)的系统中失败。总的来说,我根本不喜欢在视图中访问会话。会话对我来说更像一个数据源。

您可以从会话中读取身份验证数据。比如:

$user = $session->read('Auth'); 
别忘了在AppController中添加会话帮助程序

var $helpers = array('Session');

但我需要它在布局中,而不是在视图中!Layout没有任何控制器,我可以在渲染之前将其放入其中…您显然不知道CakePHP或MVC是如何工作的?这将为视图设置数据,从而使其在所有布局中可用。布局实际上只是视图的一部分。布局的渲染方式与视图相同,视图仅在布局内部渲染。另外,我建议你在告诉别人代码不起作用之前先尝试一下。这只是一个比我提供的解决方案更简单的解决方案。你必须在任何需要的地方调用$this->Session->read(),并在不总是需要的时候加载帮助程序。我认为他询问布局而不是视图的主要原因是他想在任何地方发布它。布局与视图相同。。。视图(类)中设置的内容在布局中也可用。