我正在使用Cake 2.3.5。我按照主网站上的Blog + Authentication教程进行操作。我想改变它,以便在所有页面的标题中显示欢迎消息,因此我需要在default.ctp中获取用户名。
我尝试过这些方法:
//these don't work..
//in default.ctp
<div>Signed in as: <?php echo AuthComponent::user('username'); ?></div>
<?php $user = $this->Session->read('Auth.User');
echo $user['username']; ?>
两者总是返回null,并且没有任何内容被打印,即使在我成功获取用户视图中的用户名的页面上,也可以通过在UsersController中根据启动该函数的id号设置php变量来实现:
//this works..
//in UsersController
$this->set('user', $this->User->read(null, $id));
//in users/view
<div>Signed in as: <?php echo $user['User']['username']; ?></div>
如何在default.ctp中获取登录用户数据?
编辑:
我遇到了问题:
$user = $this->Session->read('Auth.User');
$this->set('user', $user);
如果我将此代码设为默认值:
echo $user['username'];
它在home.ctp中工作,但在任何用户视图中抛出'索引不存在错误'。如果我将代码更改为:
echo $user['User']['username'];
我遇到了相反的问题(适用于用户视图,但在主页上引发错误)。
我尝试将它放在AppController中:
$user = $this->Session->read('Auth.User');
if (array_key_exists('User', $user))
$user = $user['User'];
$this->set('user', $user);
但没有改变。
解决方案:
这是最简单的方法:
//in default.ctp
$user = AuthComponent::user();
$username = $user['username'];
答案 0 :(得分:1)
在AppController的beforefilter中使用
function beforeFilter(){
$user = $this->Session->read('Auth.User');
$this->set('username', $user['username']);
}
现在,在default.ctp中,您可以访问$ username;
答案 1 :(得分:-1)
最简单的方法是使用AuthComponent::user();