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

Lesen des CI-Framework-Quellcodes: ControllerController.php

Aug 08, 2016 am 09:33 AM
controller gt load this

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.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4?

So lösen Sie das Problem, dass SpringBoot den Controller nicht scannen kann So lösen Sie das Problem, dass SpringBoot den Controller nicht scannen kann May 14, 2023 am 08:10 AM

So lösen Sie das Problem, dass SpringBoot den Controller nicht scannen kann

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Fix: Snipping-Tool funktioniert unter Windows 11 nicht

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone Jul 29, 2023 am 08:22 AM

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone

So fügen Sie SpringBoot-Multicontrollern ein URL-Präfix hinzu So fügen Sie SpringBoot-Multicontrollern ein URL-Präfix hinzu May 12, 2023 pm 06:37 PM

So fügen Sie SpringBoot-Multicontrollern ein URL-Präfix hinzu

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

Ist watch4pro besser oder GT? Ist watch4pro besser oder GT? Sep 26, 2023 pm 02:45 PM

Ist watch4pro besser oder GT?

Was tun, wenn die MySQL-Ladedaten verstümmelt sind? Was tun, wenn die MySQL-Ladedaten verstümmelt sind? Feb 16, 2023 am 10:37 AM

Was tun, wenn die MySQL-Ladedaten verstümmelt sind?

See all articles