2016-06-27 36 views
6

voglio avere delle belle pagine di errore. Per questo ho bisogno di ottenere alcuni file CSS e JS. Ma per qualche strana ragione l'uso di base_url() non funziona su error_pages. Naturalmente potrei semplicemente usare href="/css/style.css" e dirgli di ottenerlo dalla cartella principale. Ma il sito web potrebbe benissimo essere messo in una cartella diversa dalla cartella radice. Quindi usare / non è un'opzione.La funzione base_url() non funziona sulle pagine di errore. Anche dopo l'autoloading

Quindi la mia domanda ora è perché non funziona base_url() su una pagina di errore? L'ho caricato automaticamente, quindi non dovrebbe funzionare?

Questo è quello che ho provato quando stavo cercando di ottenere il base_url() dalla pagina error_404 nella vista.

Nel mio autoload.php ho incluso l'assistente url

$autoload['helper'] = array('url', 'form'); 

E nella mia pagina error_404 (application/vista/errori/html/error_404.php) sto facendo eco alla base_url in questo modo:

<?php echo base_url(); ?>

Questo è l'errore che sto ricevendo:

An uncaught Exception was encountered 

Type: Error 

Message: Call to undefined function base_url() 

Filename: /usr/local/www/example.com/application/views/errors/html/error_404.php 

Line Number: 37 

Backtrace: 

    File: /usr/local/www/example.com/index.php 
    Line: 315 
    Function: require_once 

Preferisco non apportare modifiche nella cartella system poiché non desidero ripetere il processo ogni volta che aggiorno la cartella Codeigniter.

Sistema:

Codeigniter 3.0.6

PHP 7.0.8

Nginx 1.11.1

UPDATE: mi piacerebbe chiamare base_url su ogni pagina di errore (db, 404, generale, php, ecc).

+0

http://stackoverflow.com/questions/ 2310061/how-can-i-redirect-a-404-error-in-a-custom-404-page-using-codeigniter Dai un'occhiata a questo. –

+0

Che funzionerà sicuramente. Ma non è eccessivo? Creare una classe personalizzata solo per mostrare base_url()? Aspetterò un po 'per vedere altre risposte. – Efekan

+0

E le altre pagine_errore? Il commento sopra funzionerà solo per la pagina 404, ho corretto? – Efekan

risposta

5

Il caricatore automatico non funziona perché il caricatore automatico carica le librerie dopo i controlli degli errori sono finiti.Se ci sono errori come un 404 not found, visualizzerà la pagina di errore personalizzata senza caricare il caricatore automatico.

per ottenere il vostro base_url su una pagina personalizzata si avrebbe bisogno di aggiungere il seguente nella vostra pagina di errore personalizzata:

$base_url = load_class('Config')->config['base_url']; 

Tratto da: http://forum.codeigniter.com/thread-65968-post-335822.html#pid335822

1

È necessario caricare la classe di supporto per ottenere le funzioni di url di accesso. Quindi, cercare di fare in primo luogo:

$this->load->helper('url'); 

Quindi è possibile eco utilizzando

echo base_url(); 

In alternativa, è possibile ottenere lo stesso risultato con

$this->config->config['base_url']; 
+0

Dove dovrei caricare l'URL di supporto per una pagina di errore che viene chiamata automaticamente ogni volta che visito un URL che non esiste? Inoltre, quali sono i punti di utilizzo del caricamento automatico se devo ancora caricarlo manualmente? – Efekan

+0

Puoi caricare l'helper in 'application/config/autoload.php', ma perché stai cercando di farlo manualmente? La pagina 'error_404' viene chiamata automaticamente quando non viene trovato un controller. – samayo

+0

Questo è il problema. L'helper è ** già ** nel 'autoload.php'. E non riesco ancora a chiamare il 'base_url()'. Lo stesso vale per la tua alternativa. – Efekan

0

Per fare questo, deve ignorare le pagine di errore nel tuo file routes.php qualcosa come

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

E all'interno della funzione method(), è possibile accedere a base_url() dopo aver caricato l'helper uri come se fosse un normale controller codeign.

$this->load->helper('uri'); 
echo base_url(); 

se abbiamo bisogno di cambiare il design di altri pages.we errore php/db può modificare i seguenti file enter image description here

+0

Come potrei essere in grado di sovrascrivere una pagina di errore del database? O una pagina di errore PHP? – Efekan

+0

per 404 pagine di errore, il codice precedente va bene. Ignorerò altri errori modificando i file core. Quale versione di CI stai usando? – Shin

+0

Va bene per 404 pagine ma non per le altre. Preferirei non modificare i file principali perché se c'è una nuova versione di CodeIgniter con importanti problemi di sicurezza, non vorrei perdere tempo perché devo portare il codice di porta ai file core. La versione di CodeIgniter è 3.0.6. – Efekan