如何从default.ctp访问用户的ID?

时间:2019-11-07 15:58:38

标签: cakephp

用户登录后,便可以使用配置文件按钮,该按钮会将他们重定向到其配置文件。但是,我无法获取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)来说还算是新手,因此非常感谢任何帮助/指针!

2 个答案:

答案 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);
}