Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des View-Moduls von Laravel
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum View-Modul des Laravel-Lernprogramms ein. Es bietet einen gewissen Referenz-Lernwert für alle, die es benötigen Lassen Sie uns gemeinsam mit dem Herausgeber unten lernen.
Vorwort
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum View-Modul in Laravel ein und stellt sie Ihnen als Referenz und zum Studium zur Verfügung Folgende Worte Mehr gibt es nicht zu sagen, werfen wir einen Blick auf die ausführliche Einleitung.
Dieser Artikel basiert auf der Analyse und dem Schreiben des Routing-Modulcodes der Laravel 5.4-Version;
Dateistruktur
Ansicht Die Dateistruktur und Funktionen des Moduls sind in der folgenden Abbildung dargestellt:
Der ungefähre Prozess der visuellen Präsentation:
1, starten Sie das Rendern der Ansicht, indem Sie die Methode view() aufrufen
2 (1) Durchlaufen Sie den Pfad nacheinander. Wenn der Dateiname einen Namespace hat (d. h. den Teil vor ::), verwenden Sie das registrierte Pfadarray, das dem Namespace entspricht, andernfalls verwenden Sie das globale Pfadarray (Pfadvariable in der IlluminateViewFileViewFinder-Klasse). );
(2) Kombinieren Sie den aktuellen Pfad, den Dateinamen und den Suffixnamen (die Standardreihenfolge ist blade.php, php, css), um festzustellen, ob die Datei vorhanden ist
(3) Wenn die Datei nicht existiert, wird eine Ausnahme gemeldet: Die entsprechende Ansicht Die Datei existiert nicht, die entsprechende Engine wird zum Parsen gemäß dem Suffixnamen aufgerufen
5. Wenn es sich um ein Blade.php-Suffix handelt, verwenden Sie die Blade-Engine 🎜>Diese Engine übernimmt die Initiative zum Cachen. Wenn die Cache-Datei nicht abgelaufen ist, wird sie direkt aufgerufen und die Cache-Datei wird über sha1 (im Speicher/Framework/) generiert. Ansichtenverzeichnis (unten);
ob_start(); include $__path; ob_get_clean();Blade-Engine-Kompilierung
Die Blade-Engine kompiliert Dateien über eine große Anzahl regulärer Matching- und Replacement-Implementierung;
Während des Parsing-Prozesses verwendet Blade zunächst die Funktion token_get_all, um den HTML-Code (T_INLINE_HTML) in der Ansichtsdatei abzurufen, der berücksichtigt wird den PHP-Interpreter-Teil und führen Sie dann den regelmäßigen Austausch der Kommentare, Erweiterungen, Anweisungen und Echos-Teile nacheinander durch.
Kommentarteil
protected $compilers = [ 'Comments', // 注释部分 'Extensions', // 扩展部分 'Statements', // 语句块 (@ 开头的指令) 'Echos', // 输出 ]; protected function parseToken($token) { list($id, $content) = $token; if ($id == T_INLINE_HTML) { foreach ($this->compilers as $type) { $content = $this->{"compile{$type}"}($content); } } }
Erweiterungsteil
Fügen Sie über die Extend-Methode eine benutzerdefinierte Verarbeitungsrückruffunktion zu BladeCompiler hinzu und führen Sie einen benutzerdefinierten Textabgleich und eine benutzerdefinierte Textersetzung für den Vorlageninhalt durch.
preg_replace("/{{--(.*?)--}}/s", '', $value);
Anweisungsersetzung
Dieser Teil soll den Text der Anweisungen ersetzen, die kommen mit dem Framework wie @if und den durch die Direktivenmethode registrierten Anweisungen;
// 自定义的文本替换扩展 数组 protected $extensions = []; protected function compileExtensions($value) { foreach ($this->extensions as $compiler) { $value = call_user_func($compiler, $value, $this); } return $value; }
ViewCompilersConcernsCompilesAuthorizations: Berechtigungsprüfung
Zu den Befehlen gehören: @can, @cannot, @elsecan, @elsecannot, @endcan, @endcannot
ConcernsCompilesComponents: bezogen auf Komponenten und Slots
Zu den Anweisungen gehören: @component, @endcomponent, @slot, @endslot
ConcernsCompilesConditionals: bezogen auf Urteilsaussagen
ConcernsCompilesIncludes: eingebettete Datei
ConcernsCompilesInjections: Service Injection
ConcernsCompilesLayouts: bezogen auf das Layout
ConcernsCompilesLoops: bezogen auf Schleifen
BedenkenCompilesRawPhp: im Zusammenhang mit nativen PHP-Anweisungen
ConcernsCompilesStacks: bezogen auf den Stack
ConcernsCompilesTranslations: im Zusammenhang mit der Lokalisierungsübersetzung
Echo-Ausgabe ist für {!!} , {{ }} für reguläre Ersetzung;
{!! !!} gibt nicht maskierte Zeichen aus, die zur Ausgabe nativer HTML-Tags-Werte verwendet werden;
{{ }} gibt normal aus und unterstützt die Ersetzung durch ternäre Operatoren.
{{ }}} gibt Escape-Zeichen aus und unterstützt die Ersetzung durch ternäre Operatoren 🎜>
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des View-Moduls von Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!