在调用beforeRender之前,对象是否在beforeFilter中被初始化为AppController的属性?

时间:2013-08-01 23:14:25

标签: php cakephp cakephp-2.0

我正在尝试将Facebook集成到我的一个cakePHP2应用程序中,并在beforeFilter中初始化facebook类,如下所示:

public function beforeFilter(){
    $this->Facebook = new Facebook(array(
        'appId'  => 'myappid98a232466',
        'secret' => 'myappsecret8e06342c5',
    ));

}

稍后在beforeRender当我尝试访问Facebook的方法时,我得到胎儿错误:在非对象上调用成员函数getLoginUrl()

public function beforeRender(){
    $this->set('fbLoginUrl', $this->Facebook->getLoginUrl());
}

$this->FacebookbeforeRender()的值设置为null。为什么对象会被破坏?

1 个答案:

答案 0 :(得分:1)

未运行beforeFilter

很可能在子类中定义了一个未调用父类的beforeFilter。因此,AppController中的beforeFilter不会运行,并且永远不会设置该属性。修复:

class FoosController extends AppController {

    public function beforeFilter() {
        ...
        parent::beforeFilter(); // added
    }

}