2010-02-04 13 views
10

Sto tentando di caricare l'helper del cookie nel mio hook pre_controller per una funzione 'remember me' sul nostro sito. Ho pensato che creare un'istanza dell'oggetto CI con $ ci = & get_instance(); mi consentirebbe di accedere agli aiutanti di caricamento, ma questo non è il caso.CodeIgniter: hook (pre_controller) caricamento helper

Pensieri?

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

risposta

12

Il gancio pre_controller esegue prima che l'oggetto eccellente è stato completamente realizzato, quindi get_instance() non può funzionare - l'oggetto statico che restituisce un riferimento non è stata ancora inizializzata.

Utilizzare invece il gancio post_controller_constructor; il costruttore del controller verrà eseguito e l'oggetto super CI sarà disponibile per l'uso.

14

Il problema con il post_controller_constructor è eseguito dopo il costruttore (abbastanza divertente) e se si utilizzano i costruttori di Controller per un sacco di cose questo può essere un problema.

Se non è un problema per te (il tuo aiutante non inciderà su qualcosa eseguito o caricato nei tuoi costruttori) abbastanza giusto, se è un problema hai due soluzioni.

  1. Al posto del gancio mettere il codice in MY_Controller
  2. Creare mio_controllore e aggiungere in un punto di aggancio personalizzato.

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

Si noti che se si sta utilizzando CodeIgniter 3.0 o versione successiva, la funzione _call_hook è stato rinominato call_hook.