Utilizzare la class Loader all'interno di un hook in CodeIgniter

Ho questa function che è in un hook:

public function checkIfLogged() { $this->CI = & get_instance(); if(!$this->CI->session->userdata('logged') ){ $this->CI->load->view('common/home'); exit; } } 

Il mio problema è che $this->CI->load->view('common/home'); in realtà non carica affatto il file model. C'è qualche risonanza perché?

Sto usando un hook post_controller_constructor.

Grazie, Peter

pre_system

Chiamato molto presto durante l'esecuzione del sistema. A questo punto sono stati caricati solo il benchmark e la class hooks. Nessun routing o altri processi sono accaduti.

pre_controller

Chiamato immediatamente prima che qualcuno dei tuoi controller venga chiamato. Sono state eseguite tutte le classi di base, il routing e i controlli di sicurezza.

post_controller_constructor

Chiamato immediatamente dopo l'istanziazione del controller, ma prima che si verifichino chiamate di metodo.

post_controller

Chiamato immediatamente dopo l'esecuzione completa del controller.

display_override

Sostituisce la function _display (), utilizzata per submit la pagina finalizzata al browser Web al termine dell'esecuzione del sistema. Questo ti permette di usare la tua metodologia di visualizzazione. Si noti che sarà necessario fare riferimento al superobject CI con $ this-> CI = & get_instance () e quindi i dati finalizzati saranno disponibili chiamando $ this-> CI-> output-> get_output ()

cache_override

Consente di call la propria function invece della function _display_cache () nella class di output. Questo ti permette di usare il tuo meccanismo di visualizzazione della cache.

post_system

Chiamato dopo che la pagina finale renderizzata viene inviata al browser, al termine dell'esecuzione del sistema dopo che i dati finalizzati sono stati inviati al browser.

così

penso che quello che stai cercando sia display_override

ma puoi anche dare un'occhiata qui CodeIgniter deve caricare la visualizzazione nella fase finale?

Il vero problema era il tuo uso exit . Quando carichi una vista, il suo output viene aggiunto alla class Output ( system/core/Output.php ). I dati della vista finale vengono quindi inviati (echeggiati) al browser dalla row $OUT->_display(); trovato in system/core/CodeIgniter.php .

Dato che hai gettato l' exit lì, lo script si ferma e questo metodo di visualizzazione non viene mai chiamato.

Non so davvero cosa stai cercando di fare con questo hook (sembra che mostri una pagina specifica se un utente è disconnesso o qualcosa del genere), ma la soluzione più rapida sarebbe quella di restituire l'output della vista e farlo eco direttamente dal hook.

 public function checkIfLogged() { $this->CI = & get_instance(); if(!$this->CI->session->userdata('logged') ){ exit($this->CI->load->view('common/home', null, true)); } } 

display_override l'uso del hook display_override , perché il codice dell'integer controllore verrà eseguito prima che l'hook abbia anche la possibilità di controllare i particolari dati di session (ed è ansible che il controller possa sovrascrivere anche quei dati di session, dando risultati inaspettati).

Potresti anche considerare l'utilizzo di un controller di base (MY_Controller) invece di un hook. Potrebbe essere più adatto a seconda della situazione o della funzionalità desiderata.