2013-05-02 6 views
0

J'ai divers contrôleur est dossier core/ nommé core/my_controller.php et d'autres contrôleurs dans le dossier libraries/ comme libraries/user_controller.php, libraries/frontend_controller.php. Maintenant, j'utilise ce code ci-dessous dans config.php pour charger automatiquement ces fichiers. Mais je ne pense pas que cela fonctionne.Codeigniter contrôleur de chargement automatique ne fonctionne pas

Je vois ce message d'erreur Fatal error: Class 'MY_Controller' not found in /home/manumakeadmin/manumake.com/2d/application/libraries/frontend_controller.php on line 3

function __autoload($classname) { 

    if (strpos($classname, 'CI_') !== 0) { 
     $file = APPPATH . 'libraries/' . $classname . '.php'; 
     if (file_exists($file) && is_file($file)) { 
      @include_once($file); 
     } 
    } 
} 

EDIT

Je peux le faire fonctionner en incluant manuellement les fichiers comme

<?php 
include_once APPPATH.'core/my_controller.php'; 

class Frontend_controller extends MY_Controller 
{ 

Mais je me demandais si je pouvais faire fonctionner le code de chargement automatique

Répondre

1

Library file names and class names must match and be capitalised - Frontend_controller.php

Lorsque extending a core class, le nom du fichier doit également correspondre au nom de la classe. Capitaliser le préfixe et la première lettre du nom de la classe dans le fichier: MY_Controller.php Le préfixe peut être réglé: application/config/config.php

Assurez-vous également que vos fichiers se trouvent dans le répertoire application, plutôt que system. Cela semble être le cas, mais ça vaut le coup de vérifier.

C'est toujours une bonne idée de vérifier les conventions de dénomination user guide. Par exemple, les noms de classe model doivent avoir la première lettre en majuscule et le reste en minuscule; le nom du fichier doit être en minuscules et correspondre au nom de la classe.


Cependant, il est très important de réaliser que libraries in CodeIgniter aren't intended for extending core classes, par exemple CI_Controller, que je suppose MY_Controller prolonge. Les bibliothèques devraient être utilisés pour:

  • créer entièrement nouvelles bibliothèques.
  • étendre les bibliothèques natives.
  • remplacer les bibliothèques natives.

Je pense qu'il est probable que votre Frontend_controller serait mieux situé dans: application/controllers/

+0

Merci beaucoup. Mais une fois que je faisais la même chose dans mon serveur Linux, et j'ai eu des messages d'erreur parce que j'utilisais les noms de fichiers en majuscule pour les faire correspondre avec le nom du modèle – prakashchhetri

+0

Pas de soucis! Vous avez raison - [les noms des fichiers de modèles doivent être en minuscules] (http://ellislab.com/codeigniter/user-guide/general/models.html#anatomy). C'est toujours une bonne idée de vérifier les conventions de dénomination dans le guide de l'utilisateur. – jleft

2

Il y a aussi autoloading non-ciclasses technique documentée dans ces deux liens et mentioned avant. Ajouter un extrait à config.php pour charger ces classes fait l'affaire.

function __autoload($class) 
{ 
    if (substr($class,0,3) !== 'CI_') 
    { 
     if (file_exists($file = APPPATH . 'core/' . $class . EXT)) 
     { 
      include $file; 
     } 
    } 
} 

et en ajoutant votre classe de base dans application/core/Base_Controller.php

Questions connexes