Как получить доступ к зарегистрированным пользовательским данным в макете. (Торт PHP 3)

У меня есть веб-приложение, запрограммированное на cakephp 3.

Я хочу иметь макет, который показывает имя и фамилию пользователя, вошедшего в систему. как что-то на главной странице facebook. что вы можете нажать и перейти на свою страницу. Я хочу, чтобы эта функция была на каждой странице, поэтому я решил использовать макеты.

моя таблица Users выглядит так:

| идентификатор | имя пользователя | пароль | электронная почта | имя_имя | фамилия | создано | изменено |

Я использую компонент аутентификации следующим образом:

$this->loadComponent('Auth', [
        'loginRedirect' => [
            'controller' => 'Pages',
            'action' => 'display'
        ],
        'logoutRedirect' => [
            'controller' => 'Users',
            'action' => 'login'
        ],
        'authError' => 'Authentication Error'
    ]);

Как загрузить имя и фамилию пользователя в макет?


person Alireza    schedule 02.02.2015    source источник
comment
@ndm, в этом вопросе он спросил об отображении в поле зрения, но я хочу, чтобы эта информация была в макете. пожалуйста, обратите внимание на вопрос.   -  person Alireza    schedule 03.02.2015
comment
Макеты являются частью уровня представления, они представляют собой не что иное, как шаблоны глобального представления (оболочки). Пожалуйста, обратите внимание на концепции программного обеспечения, которое вы используете.   -  person ndm    schedule 03.02.2015


Ответы (3)


вы можете сделать это с помощью Session. как:

$user = "";
$loguser = $this->Session->read('Auth.User');
if(!empty($loguser)){
    $user = $loguser['first_name']." ".$loguser['last_name'];
}

ОБНОВЛЕНИЕ (23 августа 2015 г.):

так как недавно cakephp говорит, что SessionHelper устарел, вместо этого вы должны использовать request->session().

$loguser = $this->request->session()->read('Auth.User');
if(!$loguser) {
    $user = $loguser['first_name'].' '.$loguser['last_name'];
}
person Alireza    schedule 03.02.2015
comment
Спасибо за это объяснение. Это работает, но я получаю предупреждение об устаревании: SessionHelper has been deprecated. Use request->session() instead. - person Vaughany; 24.06.2015

Вы можете передавать свои переменные через контроллер в представления:

$this->set('user','users_data');

а затем передайте это в макет:

$this->assign('user',$user);

и показать его в макете:

$this->fetch('user');
person Phaerithm    schedule 04.02.2015

Вам нужно передать данные из контроллера в среду просмотра. Я обнаружил, что лучший способ сделать это глобально — поместить оператор 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);

Только убедитесь, что вы не разместили там какие-либо конфиденциальные данные, например, пароль, так как ошибка на уровне шаблона потенциально может их раскрыть.

person Roger Kaplan    schedule 17.12.2016