2012-01-01 9 views
0

Я использую 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? Есть ли какой-то пример онлайн?

ответ

1

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

В контроллере:

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

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

Вы можете поместить что-то подобное в app_controller.php

function beforeFilter() { 
     if($this->Auth->user()){ 
      $this->layout = 'members'; 
     } 
    } 
Смежные вопросы