2012-08-15 4 views
2

J'essaie d'étendre un contrôleur avec ma propre classe qui étend la classe CI_Controller par défaut. Sauf que ça ne marche pas.Codeigniter - extension du contrôleur ne fonctionne pas

Il dit qu'il ne peut pas trouver ma sous-classe. Ma sous-classe est située dans application/core et s'appelle My_Control_Panel.

Ma classe qui étend sur mon sous-classe:

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

class Developers extends My_Control_Panel 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->helper('form'); 
     $this->load->helper('url'); 
     $this->load->database(); 

     $this->checkIfLoggedIn(); 
     $this->checkIfAllowedToViewPage(); 
} 

Mon sous-classe:

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

class My_Control_Panel extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 
} 

Il ne cesse de dire qu'il ne peut pas trouver mon sous-classe, alors qu'il devrait fonctionner .

Répondre

3

vous devez nommer votre fichier comme celui-ci My_Controller.php dans votre core dossier puis vous tapez votre code comme

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

class My_Control_Panel extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 
} 

et c'est le droit façon de le faire dans CodeIgniter, pas comme mentionné dans la première réponse avec l'inclure un ..

+0

Cela fonctionne également. Merci. :) – DijkeMark

+0

votre bienvenue :) – zaherg

+0

est le dossier 'core' le bon endroit pour les classes comme ça? – Matthew

2

Vous devrez inclure la classe parente (My_Control_Panel) dans la sous-classe (Developers), comme suit:

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

include_once '../path/to/mycontrolpanel.php'; 

class Developers extends My_Control_Panel 
{ 
    // whatever 
} 
+0

Mais cela n'a pas été mentionné dans de userguide de CodeIgniter. Êtes-vous sûr que c'est la bonne façon? – DijkeMark

+0

C'est ainsi que je l'ai fait dans le passé. – Matthew

+0

Ça marche pour moi, mais je doute encore que ce soit le meilleur moyen. Merci de toute façon. :) – DijkeMark

3

Si vous voulez CI de choisir votre classe étendue, vous devrez le nommer MY_Controller . La partie MY_ est configurable, mais les autres parties ne le sont pas.

La MY_ partie vient former le config/config.php:

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

Ouais, j'ai essayé de le changer et d'autres choses, mais il n'a pas pu trouver ma sous-classe de toute façon – DijkeMark

+0

Cela finit généralement par être un problème de majuscule/minuscule, votre exemple a 'My' avec 'y' minuscule. Peut-être que c'est la raison. (ou pourrait être votre config a 'My_') – complex857

+0

Désolé à ce sujet, était une erreur de copie. :) Dans mon code c'est MY_ – DijkeMark

Questions connexes