您好我在CakePHP 3项目上工作..
我想从 default.ctp 显示已登录用户的用户名,所以我尝试了这个:
//in default.ctp
$user = $this->Session->read('Auth.User');
if(!empty($user)) {
echo 'Hi ', $user['user_name'];
}
它没有用,我发现其他解决办法告诉当前用户从 AppController 进行会话它也不起作用这就是:
// in AppController
function beforeFilter(){
$user = $this->Session->read('Auth.User');
$this->set('username', $user['username']);
}
并在 default.ctp :
<?=$username?>
有人可以帮助我吗?
答案 0 :(得分:7)
访问会话是错误的方法。 CakePHP中的auth系统可以处理不同的用户来源,例如,赢得会话无状态auth系统。
所以正确的方法是让用户从抽象的auth系统中获取,不直接从会话中读取它。在会话密钥更改的情况下,会话方法也会搞砸。
在AppController中添加:
public function beforeRender() {
$this->set('user', $this->Auth->user());
}
答案 1 :(得分:4)
<?php $session = $this->request->session(); // less than 3.5
// $session = $this->request->getSession(); // 3.5 or more
$user_data = $session->read('Auth.User');
if(!empty($user_data)){
print_r($user_data);
}?>
试着希望它有所帮助......
答案 2 :(得分:1)
您可能需要包括 -
{app}中的use Cake\View\Helper\SessionHelper ;
//
你有正确的代码片段 -
// in AppController , this function being called before every request
function beforeFilter(){
$user = $this->request->session()->read('Auth.User');
$this->set('username', $user['username']);
}
显然这些设置值将在您的视图布局文件中提供。
<?=$username?> or <?php echo $username ;?> // both are same.
你没有来这里?