2011-07-20 27 views
5

Ho esteso il controller CodeIgniter aggiungendo MY_Controller.php nella cartella Application/Core. Funziona bene, ma ora quando aggiungo il seguente codice nella pagina error_404.php in Application/errors, ottengo l'errore.CodeIgniter: Classe 'CI_Controller' non trovata

Codice problema che causa:

<?php $ci =& get_instance();?> 
<?php $this->ci->load->view('header')?> 

Errore:

Fatal error: Class 'CI_Controller' not found in path\to\system\core\CodeIgniter.php on line 231 

La linea 231 della system\core\CodeIgniter.php è:

function &get_instance() 
    { 
     return CI_Controller::get_instance(); 
    } 

Come posso risolvere questo in modo che Posso caricare vie w in error_404.php senza modificare nulla nei file di sistema.

PS. Sto usando l'ultima versione.

Grazie.

risposta

4

Non credo che CI_Controller sia già stato caricato. La classe Exception sta gestendo l'output della pagina 404 utilizzando uno include.

In passato utilizzavo direttamente lo include s per mettere insieme un modello o fare una richiesta o CURL al mio URL di pagina 404, ma alla fine ci hanno fatto qualcosa. In 2.0 è possibile definire una pagina 404 personalizzata in routes.php:

$route['404_override'] = 'controller/method/parameter'; 

è ancora not a perfect solution, ma il modo più semplice ora è solo quello di utilizzare il percorso.

Si noti che base_url()."controller/method/parameter" deve essere un url valido e che è necessario assicurarsi di impostare un'intestazione 404 nel controller che emette anche la pagina (non viene eseguita automaticamente per qualche motivo).

+0

Se si sta utilizzando Composer per il caricamento automatico, questo errore potrebbe anche essere causato da una directory del fornitore mancante. In questo caso, correggere eseguendo 'install install' sul server (consigliato) o caricando tramite FTP non è possibile eseguire un comando sul server. –

0

Prova:

<?php $ci =& get_instance();?> 
<?php $ci->load->view('header')?> 

Una volta assegnato l'istanza di CI per $ ci si può semplicemente utilizzare $ ci-> load-> view ('intestazione) in tutto il file.

+0

Ho provato anche quello, non funziona. L'errore è causato dalla prima riga, poiché rimane la stessa anche se rimuovo la seconda riga. – Roman

4

Ho avuto questo problema quando si segue il tutorial CodeIgniter qui: http://codeigniter.com/user_guide/tutorial/static_pages.html

Il problema era ho cercato di accedere all'URL:

localhost/CodeIgniter_2.1.1/application/controllers/pages.php

anziché l'indirizzo:

localhost/CodeIgniter_2.1.1/index.php/pagine/vista

So che è stato circa 18 mesi da quando hai fatto questa domanda, ma forse può aiutare qualcun altro :)

4

o si potrebbe provare questo, forse po 'sporco, ma penso che sarà lavorare per me

aggiornamento tua eccezione a

function show_404($page = '', $log_error = TRUE) { 
    if ($log_error) { 
    log_message('error', '404 Page Not Found --> '.$page); 
    } 
    header('Location: http://www.########.###/error/error_404'); 
    die(); 
} 

poi basta creare controller per gestire il reindirizzamento, magari con diversi errori è possibile utilizzare lo stesso controller

in questo modo otterrete la vostra intestazione e il footer dinamici