Heim > Backend-Entwicklung > PHP-Tutorial > Lesen des CI-Framework-Quellcodes: ControllerController.php

Lesen des CI-Framework-Quellcodes: ControllerController.php

WBOY
Freigeben: 2016-08-08 09:33:20
Original
1466 Leute haben es durchsucht

Lesen des CI-Framework-Quellcodes: ControllerController.php

Die Zeit war in letzter Zeit knapp und die Aktualisierung der Quellcode-Lesereihe war etwas langsam. Da Controller relativ wenig Code enthält, wird in diesem Blog zunächst die Quellcode-Analyse dieser Datei aktualisiert.

Nach dem Routing und der Verteilung übernimmt der eigentliche Anwendungscontroller alle Anfragen des Benutzers und ist für die Interaktion mit Benutzerdaten verantwortlich. Alle Anwendungscontroller in CI sollten Unterklassen von CI_Controller sein (es sei denn, Sie erweitern den Kern von CI, dann kann Ihre übergeordnete Controller-Klasse MY_Controller sein).

In Anwendungscontrollern verwenden wir häufig Code wie diesen:

/* 加载配置文件 */
$this->load->config("config_app");

/* 加载model */
$this->load->model("user");

/* 加载视图 */
$this->load->view("index");

/* 获取post */
$this->input->post("data",true);

/* 获取 get */
$this->input->get("data",true);

/* 清除xss */
$this->security->xss_clean($data);

/* mark时间点 */
$this->benchmark->mark("app_start");
Nach dem Login kopieren

Wie werden diese umgesetzt?

Obwohl die Struktur dieser Klasse sehr einfach ist, veröffentlichen wir dennoch das Klassendiagramm von CI_Controller:

1. _construct()-Konstruktor

Hier führt CI einen Prozess durch und fügt alle geladenen Komponenten zu CI_Controller hinzu (wir haben bereits gesehen, dass die Funktion is_loaded alle geladenen Komponenten verfolgt):

foreach (is_loaded() as $var => $class)
{
    $this->$var =& load_class($class);
}
Nach dem Login kopieren

Sehen Sie sich die Komponenten an, die von is_loaded verfolgt werden, wenn der Controller instanziiert wird:

Dies erklärt, warum wir CI-Komponenten über $this->input und andere Methoden aufrufen können.

Das reicht nicht, lasst uns auch den Loader einbinden:

$this->load =& load_class('Loader', 'core');

$this->load->initialize();
Nach dem Login kopieren

Jetzt können Sie die Loader-Komponente verwenden, um die Konfiguration ($this->load->config) und das Modell ($this->load->model) und laden Sie die Ansicht ($this->load->view)

CI_Controller kann als Superklasse bezeichnet werden, die mehrere Komponenten enthält. Auf diese Weise ist es dem „Agentenmuster“ im Entwurfsmuster sehr ähnlich.

2. &get_instance

Eine kurze Erklärung hier ist, dass CI_Controller eine Singleton-Modus-Klasse ist und eine Instanz dieser Klasse über die Methode get_instance() abgerufen wird. Diese Methode wird von der Funktion get_instance in CodeIgniter.php aufgerufen:

public static function &get_instance()
{  
    return self::$instance;
}
Nach dem Login kopieren

Im Folgenden finden Sie einige Hinweise zum Controller:

1. Das Verzeichnis kann im Controller in CI angepasst werden. Erstellen Sie beispielsweise das Verzeichnis admin im Verzeichnis application/controller und erstellen Sie einen neuen IndexController

test.xq.com/admin/index/
Nach dem Login kopieren
2. Der Controller sollte nicht zu viel Logik enthalten und die Geschäftslogik sollte im Modell gekapselt sein.

3. Ihr Controller sollte je nach Geschäft differenziert werden. Beispielsweise verarbeitet UserController benutzerbezogene Anfragen, während AppController Anwendungsanfragen usw. verarbeitet. Dies ist kein Prinzip, sondern nur eine Möglichkeit.

4. Der Name der Controller-Klasse sollte mit einem Großbuchstaben beginnen und der Dateiname sollte ausschließlich aus Kleinbuchstaben bestehen.

5. Methoden, die im Controller mit einem Unterstrich beginnen, werden von CI als private Methoden betrachtet und können von außen nicht direkt aufgerufen werden.

Das Obige ist der gesamte Inhalt von Controller.

Schließlich wird der Quellcode von CI_Controller veröffentlicht:

class CI_Controller {

    private static $instance;

    /**
     * Constructor
     */
    public function __construct()
    {
        self::$instance =& $this;
        
        foreach (is_loaded() as $var => $class)
        {
            $this->$var =& load_class($class);
        }

        $this->load =& load_class('Loader', 'core');

        $this->load->initialize();
        
        log_message('debug', "Controller Class Initialized");
    }

    public static function &get_instance()
    {
        return self::$instance;
    }
}
Nach dem Login kopieren


Das Obige stellt den Quellcode des CI-Frameworks vor: Controller.php, einschließlich des Inhalts. Ich hoffe, dass er für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage