2011-07-20 5 views
5

J'ai étendu le contrôleur CodeIgniter en ajoutant MY_Controller.php dans le dossier Application/Core. Cela fonctionne bien, mais maintenant quand j'ajoute le code suivant sur la page error_404.php dans Application/errors, j'obtiens l'erreur.CodeIgniter: Classe 'CI_Controller' non trouvé

Code de problème à l'origine:

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

Erreur:

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

La ligne 231 du system\core\CodeIgniter.php est:

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

Comment puis-je résoudre ce problème afin que Je peux charger vie w dans le fichier error_404.php sans rien changer dans les fichiers système.

PS. J'utilise la dernière version.

Merci.

Répondre

4

Je ne pense pas que CI_Controller est encore chargé. La classe Exception gère la sortie de page 404 en utilisant un include.

Jadis, j'avais l'habitude d'utiliser include s pour assembler un modèle, ou faire une requête file_get_contents() ou cURL à mon URL de 404 pages, mais ils ont finalement fait quelque chose à ce sujet. Dans 2.0, vous pouvez définir une page 404 personnalisée en routes.php:

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

Il est encore not a perfect solution, mais la voie est maintenant plus simple d'utiliser la route. Notez que base_url()."controller/method/parameter" doit être une URL valide, et vous devez vous assurer de définir un en-tête 404 dans le contrôleur qui sort également la page (ce n'est pas fait automatiquement pour une raison quelconque).

+0

Si vous utilisez Composer pour le chargement automatique, cette erreur peut également être due à un répertoire fournisseur manquant. Dans ce cas, corrigez en exécutant 'installer de composeur' sur votre serveur (recommandé) ou téléchargez via FTP ne sont pas capables d'exécuter une commande sur votre serveur. –

0

Essayez:

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

Une fois que vous avez attribué l'instance de CI à $ ci, vous pouvez simplement utiliser la vue $ CI-> load-> ('en-tête) dans votre dossier.

+0

J'ai essayé cela aussi, ne fonctionne pas. L'erreur est causée par la première ligne, car elle reste identique même si je supprime la deuxième ligne. – Roman

4

J'ai eu ce problème en suivant le tutoriel CodeIgniter ici: http://codeigniter.com/user_guide/tutorial/static_pages.html

Le problème était que j'ai essayé d'accéder à l'url:

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

au lieu d'adresser l'URL:

localhost/CodeIgniter_2.1.1/index.php/pages/vue

Je sais qu'il a été d'environ 18 mois que vous avez posé cette question, mais peut-être il peut aider quelqu'un d'autre :)

4

ou vous pouvez essayer cela, peut-être peu sale mais je pense que ça va travailler pour moi

mise à jour de votre exception à

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(); 
} 

alors il suffit de créer contrôleur pour gérer la redirection, peut-être avec des erreurs différentes, vous pouvez utiliser le même contrôleur

de cette façon, vous obtiendrez votre en-tête et pied de page dynamique

Questions connexes