蛋糕php和在布局中使用auth

use*_*521 4 cakephp cakephp-2.0

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

怎么做?

bur*_*zum 12

在beforeRender()中调用

$this->set('userData', $this->Auth->user());
Run Code Online (Sandbox Code Playgroud)

并将数据设置为视图并在视图中执行检查.

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

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

  • 你显然不知道CakePHP或MVC是如何工作的?这会将数据设置为视图,这样就可以在所有布局中使用它.布局实际上只是视图的一部分.布局的呈现方式与视图相同,视图仅在布局内呈现.另外我建议你在告诉某人它没有用之前尝试代码. (5认同)

Ale*_*rev 6

您可以从会话中读取Auth数据.就像是:

$user = $session->read('Auth'); 
Run Code Online (Sandbox Code Playgroud)

不要忘记在AppController中添加Session帮助器.

var $helpers = array('Session');
Run Code Online (Sandbox Code Playgroud)

  • 这只是一个比我提供的解决方案更少的DRY解决方案.您将不得不在需要它的地方呼叫$ this-> Session-> read()以及在不总是需要时加载帮助器. (2认同)