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.