Как я могу получить доступ к идентификатору пользователя из default.ctp? - PullRequest
0 голосов
/ 07 ноября 2019

Как только пользователь вошел в систему, он может использовать кнопку профиля, которая должна перенаправить его в свой профиль. Однако я не могу получить 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; ?>

В view.ctp от UsersController user_id доступен как $ user-> user_id, потому что он объявлен так:

$user = $this->Users->get($id, [
        'contain' => ['Profiles']
]);
$this->set('user', $user);

Я пытался использовать подобный код в AppController с beforeRender и beforeFilter, но, похоже, ничего не работает. Я чувствую, что я очень близок и, вероятно, просто использовал неправильную комбинацию вещей. Довольно плохо знаком с CakePHP (3.8), поэтому любая помощь / указатели будут с благодарностью!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Потратил на это больше времени, чем мне было нужно, но как только я отправил вопрос, моя следующая попытка разрешила его.

в AppController:

public function beforeFilter(Event $event)
{
    $user = $this->request->getSession()->read('Auth.User');
    if(!empty($user)) {
       $this->set('user', $user); 
    }        
}

в default.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);
}
0 голосов
/ 07 ноября 2019

В 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...