将变量从控制器传递到CakePHP中的布局

时间:2014-01-24 17:37:53

标签: cakephp

我的变量loggedInAppController函数的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
你能帮帮我吗?先感谢您。

2 个答案:

答案 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');

As on the bottom of this page

如果在视图中已经可以访问,则不会在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): ?>