Question

Dans mon répertoire CI system \ libraries, j'ai une nouvelle classe nommée DD_Controller.php. Ce fichier ressemble à ceci:

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

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


    function __construct()
    {           
        parent::Controller();
        $this->ddauthentication = "Authenticated";
    }
}
?>

Mon contrôleur d'application est défini comme suit:

class Inquiry extends DD_Controller 
{...}

La classe Inquiry fonctionne correctement lorsque j'étends Controller, mais je reçois un

.
  

Erreur fatale: la classe 'DD_Controller' n'est pas   trouvé dans   C: \ development \ localhost \ applications \ inquiry \ controllers \ inquiry.php   à la ligne 4

Quand j'étends DD_Controller. Dans le fichier de configuration, le préfixe est défini comme tel:

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

Avez-vous une idée de ce qui me manque?

TIA

Était-ce utile?

La solution

DD_Controller.php devrait être dans / system / application / libraries /

Si vous utilisez le même élément de configuration pour plusieurs applications et que vous voulez qu'elles puissent toutes étendre leurs contrôleurs vers votre contrôleur personnalisé, vous pouvez étendre la classe de contrôleur de base dans le même fichier.

Dans system / libraries / Controller.php sous la classe Controller:

class Mega_Controller extends Controller {
    function Mega_Controller()
    {
        parent::Controller();
        // anything you want to do in every controller, ye shall perform here.
    }
}

Vous pourrez alors le faire dans les contrôleurs de votre application:

class Home extends Mega_Controller {
    ....

Étant donné que la classe de contrôleur étendue que vous avez créée sera disponible. Je pense que cela vaut mieux alors écraser le contrôleur de base, mais cela fonctionnerait aussi.

Autres conseils

C’est une meilleure approche. Procédez comme suit:

  1. Allez dans le répertoire suivant: votre_app_ci / application / core / et créez un fichier php nommé MY_Controller.php (ce fichier sera l'emplacement de vos classes parentes) )
  2. Ouvrez le fichier que vous venez de créer et ajoutez vos classes multiples, comme suit:

    class Admin_Parent extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        public function test() {
            var_dump("from Admin_Parent");
        }
    }
    
    class User_Parent extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
        }
    
        public function test(){
            var_dump("from User_Parent");
        }
    
    }
    
  3. Créez vos contrôleurs enfants dans ce répertoire votre_app_ci / application / controllers / . Je l'appellerai adminchild.php

  4. Ouvrez adminchild.php et créez votre code de contrôleur, assurez-vous d'étendre le nom de la classe parente, comme suit:

    class Adminchild extends Admin_Parent {
    
        function __construct() {
            parent::__construct();
        }
    
        function test() {
            parent::test();
        }
    
    }
    

Je recommande d'éviter les "fissures". Fichiers de base CodeIgniter. Mieux vaut utiliser ses possibilités d'extension natives et essayer de s'y adapter.

La même règle que je recommanderais pour toute bibliothèque / CMS PHP. Cette règle a plusieurs raisons: - capacité à mettre à niveau rapidement sans prendre en compte des milliers de notes où et comment a été fissuré dans les fichiers de base; - la portabilité; - possibilité de partager votre code - par exemple, il sera utilisable à la fois par vous et vos amis en cas de besoin, et cela les aidera à garder leur bibliothèque à jour, de la même façon que vous.

En d’autres termes, c’est beaucoup plus professionnel et cela vous rapportera à l’avenir par la facilité d’utilisation, la portabilité et la possibilité d’applications de mise à jour.

En ce qui concerne votre question personnelle ...

Pour ma part, il n’ya rien de mal à créer votre propre bibliothèque avec tout ce dont vous avez besoin pour étendre CodeIgniter Controller natif, puis chargez cette bibliothèque dans le constructeur de Controller et vous avez terminé. La seule chose à faire pour améliorer la convivialité est de donner un nom abrégé à votre bibliothèque.

De cette façon, vous pouvez même diviser ce dont vous avez besoin en différentes parties et les placer dans des bibliothèques distinctes: WebFeatures AdminFeatures etc.

Ensuite, il vous suffit de charger les bibliothèques nécessaires dans le constructeur de votre contrôleur et vous avez terminé.

P.S. Je sais que la méthode proposée ne rentre pas dans les "droits". OOP, mais vous ne devez jamais oublier l'intégrité des bibliothèques utilisées.

Tout ce qui précède n’est qu’un aperçu de plus de mes 7 années d’expérience dans le développement professionnel de sites Web. J’espère donc que ce sera utile si ce n’est pas à suivre, du moins à en tenir compte.

Cordialement, Anton

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top