我从事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']);
}
并且在默认情况下。ctp:
<?=$username?>
我怎样才能做到这一点?
访问会话是错误的方法。CakePHP中的身份验证系统可以处理不同的用户源,例如,会话不适用于无状态身份验证系统。
因此,正确的方法是从抽象的身份验证系统中获取用户,而不是直接从会话中读取。此外,在会话密钥发生更改的情况下,会话方法也会出错。
在AppController中只需添加以下内容:
public function beforeRender() {
$this->set('user', $this->Auth->user());
}
然后访问视图中的$user-var。我的插件甚至包含一个助手来处理视图中用户数据的常见任务。
<?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);
}?>
试试这个,希望对你有帮助。。
您可能需要包括--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.
你在这里没有得到什么?