我正在使用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中做类似的事情? 在线存在一些例子吗?
答案 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';
}
}