我的变量loggedIn
在AppController
函数的beforeFilter()
中定义,如下所示:
function beforeFilter(){
$this->Auth->loginRedirect = array('controller'=> 'questions', 'action' => 'home');
$this->Auth->logoutRedirect = array('controller'=> 'questions', 'action' => 'home');
$this->Auth->allow('signup', 'confirm', 'home', 'show');
$this->Auth->authorize = 'controller';
$this->Auth->userScope = array('User.confirmed' => '1');
$this->set('loggedIn', $this->Auth->user('id'));
}
在我的布局中,我使用以下内容测试loggedIn
变量的值:
<?php if($loggedIn): ?>
当我运行应用程序时,我收到此错误:
Undefined variable: loggedIn [APP\View\Layouts\default.ctp
你能帮帮我吗?先感谢您。
答案 0 :(得分:1)
有一种更好的方法可以做到这一点。
在AppController中:
public function beforeFilter() {
parent::beforeFilter();
$this->set('loggedIn', $this->Auth->loggedIn());
}
或者,如果您需要访问控制器中的loggedIn var和您的视图:
public function beforeFilter() {
parent::beforeFilter();
$loggedIn = $this->Auth->loggedIn();
$this->set('loggedIn', $loggedIn);
}
为什么这是在beforeFilter()中?这样在准备页面之前就可以访问变量。这将返回一个布尔值,非常适合决定用户是否登录,因此请将其评估为:
<?php if($logged_in===true): ?>
如果您仍然需要用户ID或其他用户属性,请在视图中使用它:
$id = $this->Auth->user('id');
如果在视图中已经可以访问,则不会在beforeFilter中设置单个属性 - 您希望将控制器保持为尽可能瘦。
答案 1 :(得分:0)
function beforeFilter(){
parent::beforeFilter();
$this->Auth->loginRedirect = array('controller'=> 'questions', 'action' => 'home');
$this->Auth->logoutRedirect = array('controller'=> 'questions', 'action' => 'home');
$this->Auth->allow('signup', 'confirm', 'home', 'show');
$this->Auth->authorize = 'controller';
$this->Auth->userScope = array('User.confirmed' => '1');
$this->set('loggedIn', $this->Auth->user('id'));
}
更改你之前的过滤功能添加行parent::beforeFilter();
,然后在布局文件中你可以使用<?php if($loggedIn): ?>