Получить данные пользователя в default.ctp

Я использую торт 2.3.5. Я следил за руководством по Blog+Authentication на основном сайте. Я хочу изменить его так, чтобы приветственное сообщение отображалось в заголовке для всех страниц, поэтому мне нужно получить имя пользователя в default.ctp.

Я пробовал эти методы:

//these don't work..

//in default.ctp
<div>Signed in as: <?php echo AuthComponent::user('username'); ?></div>

<?php $user = $this->Session->read('Auth.User');
echo $user['username']; ?>

Оба всегда возвращают ноль, и ничего не печатается, даже на страницах, где я успешно получаю имя пользователя в пользовательском представлении, устанавливая переменную php в UsersController на основе номера идентификатора, который инициировал функцию:

//this works..

//in UsersController
$this->set('user', $this->User->read(null, $id));

//in users/view
<div>Signed in as: <?php echo $user['User']['username']; ?></div>

Как я могу получить данные о зарегистрированных пользователях в default.ctp?

РЕДАКТИРОВАТЬ:

У меня проблема с этим:

    $user = $this->Session->read('Auth.User');
    $this->set('user', $user);

Если я поставлю этот код по умолчанию:

echo $user['username'];

он работает в home.ctp, но выдает ошибку «индекс не существует» в любых пользовательских представлениях. Если я изменю код на:

echo $user['User']['username'];

Я получаю противоположную проблему (работает на просмотрах пользователей, но выдает ошибку на домашней странице).

Я попытался поместить это в AppController:

    $user = $this->Session->read('Auth.User');
    if (array_key_exists('User', $user))
        $user = $user['User'];
    $this->set('user', $user);

Но ничего не изменилось.

РЕШЕНИЕ:

Это самый простой способ:

//in default.ctp
$user = AuthComponent::user();
$username = $user['username'];

person Cbas    schedule 10.09.2013    source источник


Ответы (2)


Самый простой способ - использовать AuthComponent::user();

person kicaj    schedule 10.09.2013
comment
как бы вы получили имя пользователя после этого? - person Cbas; 10.09.2013
comment
AuthComponent::user('имя пользователя'); - person kicaj; 11.09.2013
comment
У вас есть поле username? Вы используете echo для отображения? - person kicaj; 12.09.2013
comment
да. Это ничего не отображает: ‹?php echo AuthComponent::user('username'); ?› - person Cbas; 12.09.2013

В фильтре перед использованием AppController

function beforeFilter(){
    $user = $this->Session->read('Auth.User');
    $this->set('username', $user['username']);
}

Теперь в default.ctp вы можете получить доступ к $username;

person user2443591    schedule 10.09.2013
comment
это работает, лучше ли это, чем другой ответ, если я буду читать больше данных, чем просто имя пользователя? - person Cbas; 10.09.2013
comment
Используя beforeFilter в AppController, вы можете отправлять любые данные в default.ctp. Если вам нужны только свойства пользователя, AuthComponent::user() короче. Если вам нужна другая информация (скажем, какой-то счетчик или метка), просто добавьте ее в фильтр beforeFilter. - person user2443591; 10.09.2013
comment
@Cbas Чтобы проверить структуру массива, просто используйте print_r($name_of_your_variable) - person user2443591; 10.09.2013