用户登录后,便可以使用配置文件按钮,该按钮会将他们重定向到其配置文件。但是,我无法获取default.ctp来访问当前用户。我认为这是我得到的最接近的东西:
<?php if($loggedIn) : ?>
<li><?= $this->Html->link('Search', ['controller' => 'users', 'action' => 'search']); ?></li>
<li><?= $this->Html->link('Profile', ['controller' => 'users', 'action' => 'profile', $this->request->getSession()->read('Auth.User.Id')]); ?></li>
<li><?= $this->Html->link('Settings', ['controller' => 'users', 'action' => 'settings']); ?></li>
<li><?= $this->Html->link('Logout', ['controller' => 'users', 'action' => 'logout']); ?></li>
<?php else : ?>
<li><?= $this->Html->link('Register', ['controller' => 'users', 'action' => 'register']); ?></li>
<li><?= $this->Html->link('Login', ['controller' => 'users', 'action' => 'login']); ?></li>
<?php endif; ?>
在UsersController中的view.ctp中,user_id被声明为$ user-> user_id,因为它是这样声明的:
$user = $this->Users->get($id, [
'contain' => ['Profiles']
]);
$this->set('user', $user);
我尝试在AppController中使用类似的代码使用beforeRender和beforeFilter,但似乎没有任何效果。我觉得我非常亲密,可能只是使用了错误的组合。对于CakePHP(3.8)来说还算是新手,因此非常感谢任何帮助/指针!
答案 0 :(得分:0)
在view.ctp中访问所有用户数据:
$user = $this->getRequest()->getSession()->read('Auth.User');
然后
echo $user['id'];
或
echo $this->getRequest()->getSession()->read('Auth.User.id');
如果您需要控制器中的身份验证用户数据:
$this->loadComponent('Auth');
$user = $this->Auth->user();
答案 1 :(得分:0)
花了比我更多的时间,但是当我发布问题后,我的下一次尝试就解决了。
在AppController中:
public function beforeFilter(Event $event)
{
$user = $this->request->getSession()->read('Auth.User');
if(!empty($user)) {
$this->set('user', $user);
}
}
默认情况下。ctp:
<li><?= $this->Html->link('Search', ['controller' => 'users', 'action' => 'search', $user['user_id']]); ?></li>
<li><?= $this->Html->link('Profile', ['controller' => 'users', 'action' => 'profile', $user['user_id']]); ?></li>
<li><?= $this->Html->link('Settings', ['controller' => 'users', 'action' => 'settings', $user['user_id']]); ?></li>
在UsersController中:
public function profile($id = null)
{
$user = $this->Users->get($id, [
'contain' => ['Profiles']
]);
$this->set('user', $user);
}
public function search($id = null)
{
$user = $this->Users->get($id, [
'contain' => ['Profiles']
]);
$this->set('user', $user);
}
public function settings($id = null)
{
$user = $this->Users->get($id, [
'contain' => ['Profiles']
]);
$this->set('user', $user);
}