将属性从父控制器传递到Kohana中的子控制器3

时间:2011-02-22 22:19:36

标签: php model-view-controller kohana kohana-3

我正在使用Kohana 3并使用名为controller_Facebook的中间控制器,该控制器从Controller_Template扩展,然后从Controller_Facebook扩展Controller_Home。我在Controller_Facebook中设置了两个属性,并尝试在Controller_Home中使用它们,但它在那里不可用。它给出了空值。我的代码类似于以下内容:

class Controller_Facebook extends Controller_Template{

        public $template='template';
        public $facebook;
        public $session;

    public function __contstruct(){
        include_once(dirname(__FILE__)."/facebook_class.php");
            global $facebook;
            $facebook = new Facebook(array(
              'appId'  => 'xxxxxxxxxxx',
              'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
              'cookie' => true,
            ));
            $this->facebook=$facebook;
            $this->session = $facebook->getSession();
    }
}

然后在Home_Controller中:

  class Controller_Home extends Controller_Facebook{


        public function  __contstruct() {
                parent::__contstruct();

        }



        public function action_index()
    {
                global $facebook;
        $this->template->content=new View('home');
        $this->template->selected='home';   var_dump($this->facebook);
                $this->template->app_id='123';

                var_dump($facebook);

                $this->template->session=$this->session;

    }

}

此外,如果我在父类中回显一些东西,那么它就不会输出它。它在facebook工作也是如此,这意味着我的父构造函数正在工作?我认为这是有效的。如果有人认为我做错了,请告诉我。

3 个答案:

答案 0 :(得分:2)

盲目地重载__construct,它会破坏您的控制器。您应该使用before()方法执行此操作。完成后务必致电parent::before()

global这些东西完全没必要。只需设置$this->facebook,然后稍后使用$this->facebook访问它。

答案 1 :(得分:1)

你拼错了__construct错误。

如果您将其设置为类属性,则无需访问全局。

只需使用

访问它
$this->facebook

答案 2 :(得分:1)

IMO,最好为FB类创建Kohana包装器,然后在控制器中使用它。像这样:

$this->facebook = Facebook::instance(); // wrapper will automatically load config with appId etc
$this->session = $this->facebook->get_session();

PS。可能是Kohana已经有了这个实现吗?类似于https://github.com/zombor/Kohana-Facebook