我正在使用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工作也是如此,这意味着我的父构造函数正在工作?我认为这是有效的。如果有人认为我做错了,请告诉我。
答案 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。