Эхо другое меню, если пользователь залогинен - PullRequest
0 голосов
/ 02 января 2012

Я использую CakePHP 2.0 и пытаюсь понять, как я могу echo динамическое содержимое, если пользователь вошел в приложение.

В view я хотел бы отобразить меню для входа или выхода пользователя, как я могу это сделать?

// I'm in the default template view
if (!AuthComponent::loggedIn()) {
    $menu  = $this->Html->link('Login', array('controller' => 'users', 'action' => 'login'));
    $menu .= $this->Html->link('Register',  array('controller' => 'users',  'action' => 'register'));
} else {
    $menu  = $this->Html->link('Home', array('controller' => 'users', 'action' => AuthComponent::user('id'), AuthComponent::user('username')));
    $menu .= $this->Html->link('Logout', array('controller' => 'users', 'action' => 'logout'));
}
echo $menu;

Я думал, что-то вроде этого, но я прочитал Это нарушает правила MVC.

Как мне делать такие вещи в CakePHP? Существует ли какой-нибудь пример в сети?

Ответы [ 2 ]

1 голос
/ 02 января 2012

Вы можете установить, если они вошли в систему или нет в контроллере, тогда использовать этот элемент соответственно.

В вашем контроллере:

function beforeFilter() {
    if($this->Auth->loggedIn()) {
        $userBar = 'memberBar';
    } else {
        $userBar = 'guestBar';
    }
    $this->set('userBar', $userBar);
}

В вашем макете:

<?php echo $this->element($userBar); ?>

Тогда есть элемент memberBar и элемент guestBar:

echo $this->Html->link('Home', array('controller' => 'users', 'action' => AuthComponent::user('id'), AuthComponent::user('username')));
echo $this->Html->link('Logout', array('controller' => 'users', 'action' => 'logout'));

Вы можете передать данные AuthComponent элементу, чтобы избежать использования объекта в макете.

0 голосов
/ 02 января 2012

Используйте различные макеты, один для посетителей и один для зарегистрированных пользователей.

Вы можете поместить что-то вроде этого в app_controller.php

    function beforeFilter() {
        if( $this->Auth->user() ){
            $this->layout = 'members';
        }
   }
...