web-dev-qa-db-fra.com

Contrôleur d'extension Codeigniter, contrôleur introuvable

Dans Codeigniter 2.1.2, je veux créer un contrôleur de base, puis s'étend à partir de ce contrôleur. Cela ne fonctionne pas et je ne sais pas du tout pourquoi et je suis plutôt désespéré maintenant.

Dans\application\core\MY_Base_Controller.php J'ai ceci:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Base_Controller extends CI_Controller 
{
    function __construct()
    {
        parent::__construct();
...

Dans\application\controllers\Home.php j'ai ceci:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Home extends MY_Base_Controller {

Et le message d'erreur est 

Erreur fatale: la classe 'MY_Base_Controller' est introuvable dans ...\application\controllers\Home.php à la ligne 3

Je ne sais pas du tout quoi faire, j'ai lu partout sur Internet que je devais mettre le contrôleur de base dans le dossier principal ce que je faisais, que je devais nommer le contrôleur de base avec le préfixe MY_, ce que je faisais. Mais Cela ne fonctionne toujours pas. Et dans ma config.php, cette ligne est aussi

$config['subclass_prefix'] = 'MY_';

Je lance ceci sur localhost en utilisant xampp

Merci de votre aide

EDIT

Quelqu'un pourrait-il télécharger le lien suivant, essayez-le et dites-moi ce qui ne va pas. Je viens de télécharger Codeigniter a essayé de créer un contrôleur de base et d'étendre le contrôleur de bienvenue. Ne fonctionne pas Dans rar suivant, il y a juste des fichiers modifiés. Merci http://goo.gl/sKHkDl

EDIT 2

Je peux obtenir cela en renommant MY_Base_Controller à MY_Controller . Cela signifie-t-il que je ne peux créer qu'une seule classe étendue pour un contrôleur? par exemple. je ne peux pas avoir

  • MY_Base_Auth_Controller  
  • MY_Base_Article_Controller

Juste et seulement MY_Controller ?

12
Harlsten

J'ai eu le même problème, mais si j'ai créé tous les contrôleurs dans le fichier MY_Controller.php tout a bien fonctionné.

<?php

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        // do some stuff
    }
}

class MY_Auth_Controller extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
        // check if logged_in
   }
}
5
Jose

J'ai eu le même problème dans ma première application de CI et j'ai trouvé deux éléments clés qui doivent être vérifiés:

1. Correspondance de casse: Selon la configuration de votre serveur, le nom de votre fichier dans le répertoire devra correspondre à la casse de votre classe. Par exemple, lorsque votre classe s'appelle "MY_Controller", votre nom de fichier doit être: "MY_Controller.php" sur un serveur Linux. Les serveurs Windows sont connus pour avoir des problèmes avec les noms de fichiers majuscules, vous pouvez donc essayer de nommer votre contrôleur "my_controller.php" et/ou de changer l'extension en "my_" dans votre fichier config.php au lieu de "MY_"

2. Insérez une fonction de chargement automatique Pour des raisons inconnues de moi, Codeigniter ne reconnaît pas et ne lit pas automatiquement les classes principales étendues avant le premier chargement de la classe principale. Cela peut causer des problèmes avec votre extension ne se chargeant pas correctement. Pour remédier à cela, vous pouvez ajouter ce simple script de chargement automatique au bas de votre fichier config.php.

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

Note latérale: la solution ci-dessus a été testée sur CodeIgniter 2.1.4. La question posée concernait CodeIgniter 2.1.2

15
Websmith

Toute personne lisant ceci en utilisant CI 3+ et essayant d’essayer la même chose. Veuillez noter que l’extension globale a été amortie lors de la suppression du support php 4. Vous devez utiliser les éléments suivants maintenant:

/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . '.php')) {
            include $file;
        }
    }
}
10
Brian Ramsey

Oui, avec les classes MY_ de base, vous pouvez remplacer UNIQUEMENT les entités de structure codeigniter telles que Controller, Model, Config, Exception, etc. Veuillez vous référer à https://ellislab.com/codeigniter/user-guide/general/core_classes.html

1
Alexander Yagovdik

J'ai fait face au même problème. Je pense que le problème est que CI ne charge qu'un seul fichier qui doit s'appeler "MY_controller.php". (system/core/Codeigniter.php - ligne 238). Il est conçu pour charger uniquement "MY_Controller.php". Les réponses faites ci-dessus, telles que "_autoload", existent car nous ignorons cette fonctionnalité. Je suppose que cela se trouve à la fois dans CI-2 et CI-3. Soit nous pouvons apporter des modifications aux fichiers de base, soit nous pouvons utiliser la fonction de chargement automatique, comme mentionné ci-dessus.

merci, 

0