在default.ctp中获取用户数据

时间:2013-09-10 18:32:48

标签: php cakephp authentication authorization cakephp-2.3

我正在使用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'];

2 个答案:

答案 0 :(得分:1)

在AppController的beforefilter中使用

function beforeFilter(){
    $user = $this->Session->read('Auth.User');
    $this->set('username', $user['username']);
}

现在,在default.ctp中,您可以访问$ username;

答案 1 :(得分:-1)

最简单的方法是使用AuthComponent::user();