如果用户已登录,则回显不同的菜单

时间:2012-01-01 21:25:14

标签: model-view-controller authentication cakephp-2.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中做类似的事情? 在线存在一些例子吗?

2 个答案:

答案 0 :(得分: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数据传递给元素,以避免在布局中使用该对象。

答案 1 :(得分:0)

使用不同的布局,一个用于访问者,另一个用于登录用户。

您可以在app_controller.php

中添加这样的内容
    function beforeFilter() {
        if( $this->Auth->user() ){
            $this->layout = 'members';
        }
   }