如何在布局中访问登录的用户数据。 (CakePHP 3)
How to access logged in user data, in a layout. (CakePHP 3)
我有一个用 cakephp 3 编写的网络应用程序。
我想要一个显示登录用户名字和姓氏的布局。就像 facebook 主页上的东西。您可以单击并转到您的页面。
我想在每个页面都有这个功能,所以我决定使用布局。
我的 Users
table 就像:
| id | 用户名 | 密码 | 电子邮件 | first_name | last_name | 已创建 | 已修改 |
我这样使用身份验证组件:
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'Pages',
'action' => 'display'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authError' => 'Authentication Error'
]);
如何在布局中加载用户的名字和姓氏?
您可以使用 Session
来完成。喜欢:
$user = "";
$loguser = $this->Session->read('Auth.User');
if(!empty($loguser)){
$user = $loguser['first_name']." ".$loguser['last_name'];
}
更新(2015 年 8 月 23 日):
最近 cakephp 表示 SessionHelper 已弃用,您应该改用 request->session()
。
$loguser = $this->request->session()->read('Auth.User');
if(!$loguser) {
$user = $loguser['first_name'].' '.$loguser['last_name'];
}
您可以通过控制器将变量传递给视图:
$this->set('user','users_data');
然后将其传递给布局:
$this->assign('user',$user);
并通过以下方式在布局中显示它:
$this->fetch('user');
您需要将数据从控制器传递到视图环境。
我发现在全球范围内执行此操作的最佳方法是将 set() 语句放在 AppController::beforeRender-
中
// make logged in user's first name available to the view (mainly for menu)
$name="(none)";
if($this->Auth->user()) {
$name = $this->Auth->user("first_name");
}
$this->set("user_first_name", $name);
请确保不要将任何敏感数据放在那里,例如密码,因为模板级别的错误可能会暴露它。
我有一个用 cakephp 3 编写的网络应用程序。
我想要一个显示登录用户名字和姓氏的布局。就像 facebook 主页上的东西。您可以单击并转到您的页面。 我想在每个页面都有这个功能,所以我决定使用布局。
我的 Users
table 就像:
| id | 用户名 | 密码 | 电子邮件 | first_name | last_name | 已创建 | 已修改 |
我这样使用身份验证组件:
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'Pages',
'action' => 'display'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authError' => 'Authentication Error'
]);
如何在布局中加载用户的名字和姓氏?
您可以使用 Session
来完成。喜欢:
$user = "";
$loguser = $this->Session->read('Auth.User');
if(!empty($loguser)){
$user = $loguser['first_name']." ".$loguser['last_name'];
}
更新(2015 年 8 月 23 日):
最近 cakephp 表示 SessionHelper 已弃用,您应该改用 request->session()
。
$loguser = $this->request->session()->read('Auth.User');
if(!$loguser) {
$user = $loguser['first_name'].' '.$loguser['last_name'];
}
您可以通过控制器将变量传递给视图:
$this->set('user','users_data');
然后将其传递给布局:
$this->assign('user',$user);
并通过以下方式在布局中显示它:
$this->fetch('user');
您需要将数据从控制器传递到视图环境。 我发现在全球范围内执行此操作的最佳方法是将 set() 语句放在 AppController::beforeRender-
中 // make logged in user's first name available to the view (mainly for menu)
$name="(none)";
if($this->Auth->user()) {
$name = $this->Auth->user("first_name");
}
$this->set("user_first_name", $name);
请确保不要将任何敏感数据放在那里,例如密码,因为模板级别的错误可能会暴露它。