Frage

In meinem CI-System \ Bibliotheken Verzeichnis habe ich eine neue Klasse mit dem Namen DD_Controller.php. Diese Datei sieht wie folgt aus:

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

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


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

Meine Anwendungssteuerung ist wie folgt definiert:

class Inquiry extends DD_Controller 
{...}

Die Untersuchung Klasse funktioniert gut, wenn ich Controllers nutzen, aber ich habe ein

  

Fatal error: Class 'DD_Controller' nicht   gefunden in   C: \ Entwicklung \ localhost \ applications \ Anfrage \ Controller \ inquiry.php   in Zeile 4

Als ich DD_Controller verlängern. In der Konfigurationsdatei habe ich das Präfix als solche definiert:

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

Jede Idee von dem, was ich bin fehlt?

TIA

War es hilfreich?

Lösung

DD_Controller.php sollte in / System / application / Bibliotheken /

sein

Wenn Sie die gleiche CI für mehrere Anwendungen verwenden, und Sie wollen, dass sie alle in der Lage sein, um sich ihre Controller zu Ihrer benutzerdefinierten man dann können Sie die Basis Controller-Klasse in der gleichen Datei erweitern.

Im System / Bibliotheken / Controller.php unter der Controller-Klasse:

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

Dann können Sie diese Controller in Ihrer Anwendung tun:

class Home extends Mega_Controller {
    ....

Da die erweiterte Controller-Klasse werden Sie zur Verfügung erstellt. Ich denke, das ist besser als die Basis-Controller zu überschreiben, aber das würde auch funktionieren.

Andere Tipps

Dies ist ein besserer Ansatz. Gehen Sie folgendermaßen vor:

  1. Gehen Sie in das folgende Verzeichnis: your_ci_app/application/core/ und erstellen Sie eine PHP-Datei mit dem Namen MY_Controller.php (diese Datei wird sein, wo Ihre Top geordneten Klassen befinden wird)
  2. Öffnen Sie diese Datei einfach in Ihre mehrere Klassen erstellt und fügen, etwa so:

    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. Erstellen Sie Ihre Kinder-Controller unter diesem Verzeichnis your_ci_app/application/controllers/. Ich werde nennen es adminchild.php

  4. Öffnen adminchild.php und erstellen Sie Ihren Controller-Code, stellen Sie sicher, dass Sie den Namen der Elternklasse zu erweitern, etwa so:

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

ich empfehlen "Cracking" CodeIgniter Core-Dateien zu vermeiden. Bessere Nutzung seiner nativen Möglichkeiten erstrecken und versuchen, sich in ihnen zu passen.

Die gleiche Regel würde ich für jede PHP-Bibliothek / CMS empfehlen. Diese Regel hat einige Gründe: - Fähigkeit Upgrade ohne takint Berücksichtigung Tausende von Notizen quiclky, wo und wie in Core-Dateien geknackt wurde; - Übertragbarkeit; - Möglichkeit, den Code zu teilen -, z. B., wird dies sowohl verwendbar sein, indem Sie und Ihre Freunde bei Bedarf, und es wird ihnen helfen, ihre Bibliothek zu halten auf dem neuesten Stand, die gleichen, wie Sie

Mit anderen Worten, dies ist viel professioneller und es lohnt sich für Sie in der Zukunft durch Benutzerfreundlichkeit, Tragbarkeit und durch Aktualisierung Anwendungsmöglichkeit.

In Bezug auf Ihre persönliche Frage ...

Was mich betrifft, gibt es nichts schlecht Ihre eigene Bibliothek mit allem, was erstellen Sie ein neueres CodeIgniter-Controller erweitern müssen, dann laden Sie diese Bibliothek in Controller-Konstruktor und Sie sind fertig. Das einzige, was eine bessere Bedienbarkeit zu machen, ist Kurznamen Ihrer Bibliothek zu geben.

Auf diese Weise können Sie auch teilen, was Sie in verschiedenen Stücke schneiden und in separate Bibliotheken müssen: WebFeatures AdminFeatures etc.

Dann laden Sie gerade benötigte Bibliotheken in Konstruktor Ihrer Steuerung und Sie sind fertig.

P. S. Ich weiß, dass Art und Weise vorgeschlagen, nicht in die „richtige“ OOP Konzept passen, aber in der gleichen Zeit müssen Sie nie über die Integrität der verwendeten Bibliotheken vergessen.

über Alles ist nur eine weitere Ansicht von mir 7-Jahren Erfahrung in der professionellen Web-Entwicklung, so dass ich hoffe, es wird hilfreich sein, wenn sie nicht zu folgen, dann zumindest in Betracht zu ziehen.

Viele Grüße, Anton

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top