2010-02-04 13 views
10

Próbuję załadować pomocnika cookie w moim haczyku pre_controller dla funkcji "zapamiętaj mnie" na naszej stronie. Myślałem, że tworzenie instancji obiektu CI z $ ci = & get_instance(); pozwoliłoby mi uzyskać dostęp do narzędzi do ładowania, ale tak nie jest.CodeIgniter: Hooks (pre_controller) ładowanie pomocników

Myśli?

$ci =& get_instance(); 
$ci->load->helper('cookie'); 
// does not load 

Odpowiedz

12

Hak pre_controller wykonuje przed super obiekt został całkowicie skonstruowane, tak get_instance() nie może pracować - obiekt statyczny to zwraca referencję do nie został jeszcze zainicjowany.

Zamiast tego należy rozważyć użycie haka post_controller_constructor; Twój konstruktor kontrolera zostanie wykonany, a super obiekt CI będzie dostępny do użytku.

14

Problem z post_controller_constructor jest uruchamiany po konstruktorze (wystarczająco zabawne) i jeśli używasz konstruktorów Controller do wielu rzeczy, może to być problem.

Jeśli to nie jest problem dla ciebie (Twój pomocnik nie wpłynie na cokolwiek uruchomionego lub załadowanego na twoich konstruktorów) sprawiedliwie, jeśli to jest problem, masz dwa rozwiązania.

  1. Zamiast haku umieścić swój kod w MY_Controller
  2. Tworzenie MY_Controller i dodać w punkcie zwyczaj haka.

    class MY_Controller extends Controller 
    { 
    
        function MY_Controller() 
        { 
         parent::Controller(); 
         $GLOBALS['EXT']->_call_hook('pre_controller_constructor'); 
        } 
    } 
    

Zauważ, że jeśli używasz CodeIgniter 3.0 lub nowszej, funkcja _call_hook został przemianowany na call_hook.

Powiązane problemy