Передача свойств из родительского контроллера в дочерний контроллер в Кохана 3 - PullRequest
0 голосов
/ 23 февраля 2011

Я использую Kohana 3 и использую промежуточный контроллер с именем controller_Facebook, который расширяется из Controller_Template, а затем расширяю Controller_Home из Controller_Facebook.Я устанавливаю два свойства в 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 ]

2 голосов
/ 23 февраля 2011

Do not overload __construct вслепую, это сломает ваши контроллеры.Вы должны делать это в методе before().Обязательно позвоните parent::before() после того, как вы закончите.

И эти вещи global совершенно не нужны.Просто установите $this->facebook, а затем получите к нему доступ с помощью $this->facebook.

1 голос
/ 23 февраля 2011

IMO, будет лучше создать оболочку Kohana для класса FB, а затем использовать ее в своих контроллерах. Как это:

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

PS. Может быть, Кохана уже имеет эту реализацию? Что-то вроде https://github.com/zombor/Kohana-Facebook.

1 голос
/ 23 февраля 2011

Вы написали __construct неправильно.

Также вам не нужно обращаться к глобальному объекту, если вы установили его как свойство класса.

Просто получите доступ к нему с помощью

$this->facebook
...