Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erklärung der Blade-Template-Engine in Laravel

Detaillierte Erklärung der Blade-Template-Engine in Laravel

Oct 11, 2017 am 09:06 AM
blade laravel 引擎

Die Template-Engine von Laravel verwendet die Blade-Template-Engine. Der folgende Artikel führt Sie hauptsächlich in die relevanten Informationen über die Blade-Template-Engine in Laravel ein In Bezug auf den Wert des Lernens können Freunde, die es benötigen, dem Herausgeber folgen, um gemeinsam zu lernen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Inhalte zur Blade-Vorlagen-Engine in Laravel vor und stellt sie Ihnen als Referenz und zum Studium zur Verfügung . Genug gesagt, werfen wir einen Blick auf die ausführliche Einführung.

Blade-Template-Engine

Blade ist eine einfache und leistungsstarke Template-Engine, die von Laravel bereitgestellt wird. Sie kompiliert die Blade-Ansicht in natives PHP Code erstellen und zwischenspeichern. Der Cache ändert sich, wenn sich die Blade-Ansicht ändert, was bedeutet, dass Blade Ihrer Anwendung keinen Kompilierungsaufwand hinzufügt. Blade-Ansichtsdateien verwenden das Suffix .blade.php und werden im Allgemeinen im Verzeichnis resources/views gespeichert.

Vorlagenvererbung

Schauen wir uns zunächst ein Beispiel an


<!-- Stored in resources/views/layouts/master.blade.php-->
<html>
 <head>
 <title>App Name - @yield(&#39;title&#39;)</title>
 </head>
 <body>
 @section(&#39;sidebar&#39;)
  This is the master sidebar.
 @show
 
 <p class="container">
  @yield(&#39;content&#39;)
 </p>
 </body>
</html>
Nach dem Login kopieren

Blade-Vorlagendateien enthalten typisches HTML-Markup. Sie müssen die Anweisungen @section und @yield gesehen haben. Die @section-Direktive definiert einen Inhaltsabschnitt, wie der Name schon sagt, während die @yield-Direktive verwendet wird, um den im bereitgestellten Widget-Abschnitt enthaltenen Inhalt anzuzeigen. Nachdem wir nun ein Grundlayout definiert haben, können wir die @extends-Direktive von Blade verwenden, um dieses Layout explizit zu erben. Verwenden Sie dann die @section-Direktive, um den Inhalt des Widgets in das Layout einzubinden. Im obigen Beispiel wird der Inhalt des Widgets in den @yield-Abschnitt des Layouts eingebunden:


<!-- Stored in resoures/views/child.blade.php -->
@extends(&#39;layouts.master&#39;)
 
@section(&#39;title&#39;, &#39;Page Title&#39;)
 
@section(&#39;sidebar&#39;)
 @parent
 
 <p>This is appended to the master sidebar.</p>
@endsection
 
@section(&#39;content&#39;)
 <p>This is my body content.</p>
@endsection
Nach dem Login kopieren

Im obigen Beispiel verwendet das Sidebar-Widget die @parent-Direktive, um den Inhalt des Sidebar-Teils des Layouts anzuhängen. Wenn dieser Teil des Layouts nicht verwendet wird, wird er überschrieben. Die @parent-Direktive ersetzt beim Rendern den Inhalt des Layouts durch den Inhalt der Ansicht.

Blade-Ansichten können die globale Hilfsfunktion view verwenden, um gerenderte Inhalte zurückzugeben, genau wie native PHP-Ansichten:


Route::get(&#39;blade&#39;, function () {
 return view(&#39;child&#39;);
});
Nach dem Login kopieren

Daten anzeigen

Sie können geschweifte Klammern { verwenden, um in der Ansicht übergebene Variablen anzuzeigen. Sie definieren beispielsweise die folgende Route:


Route::get(&#39;greeting&#39;, function () {
 return view(&#39;welcome&#39;, [&#39;name&#39; => &#39;Duicode&#39;]);
})
Nach dem Login kopieren

Sie können den Inhalt der Namensvariablen in der Ansicht wie folgt ausgeben:


Hello, {{ $name }}
Nach dem Login kopieren

Natürlich Sie Außerdem können Inhalte von nativen PHP-Methoden zurückgegeben werden. Tatsächlich können Sie beliebigen PHP-Code in der Blade-Echo-Deklaration verwenden: (Der Inhalt in der Blade-{{}}-Deklaration wird automatisch durch die htmlentities-Methode gefiltert, um XSS-Angriffe zu verhindern.)


The current UNIX timestamp is {{ time() }}
Nach dem Login kopieren

Da viele JavaScript-Frameworks geschweifte Klammern verwenden, um anzugeben, dass der bereitgestellte Ausdruck im Browser angezeigt werden soll. Sie können also das @-Symbol verwenden, um der Blade-Rendering-Engine mitzuteilen, dass dieser Ausdruck unverändert bleiben soll:


Hello, @{{ name }}
Nach dem Login kopieren

Wir verwenden häufig den ternären Operator zum Zuweisen Werte


{{ isset($name) ? $name : &#39;Default&#39; }}
Nach dem Login kopieren

Blade bietet eine praktische Möglichkeit, diese ternäre Deklaration zu ersetzen:


{{ $name or &#39;Default&#39; }}
Nach dem Login kopieren

Die Standard-Blade-{{}}-Deklaration verwendet automatisch die htmlentities-Methode, um XSS-Angriffe zu vermeiden. Wenn Sie nicht möchten, dass Ihre Daten maskiert werden, können Sie die folgende Syntax verwenden. Seien Sie jedoch vorsichtig und nehmen Sie sich vor Angriffen in Acht:


Hello, {!! $name !!}
Nach dem Login kopieren

Kontrollstruktur

Sie können die if-Kontrollstruktur über die Anweisungen @if, @elseif, @else und @endif verwenden:


@if (count($records) === 1)
 I have one record!
@elseif (count($records) > 1)
 I have multiple records!
@else
 I don&#39;t have any records!
@endif
Nach dem Login kopieren

Der Einfachheit halber bietet Blade natürlich auch einen alternativen Befehl zum @unless-Befehl:


@unless (Auth::check())
 You are not signed in.
@endunless
Nach dem Login kopieren

Sie können auch den Befehl @hasSection verwenden, um festzustellen, ob das für das Layout bereitgestellte Widget Inhalte enthält:


<title>
 @hasSection(&#39;title&#39;)
 @yield(&#39;title&#39;) - App Name
 @else
 App Name
 @endif
</title>
Nach dem Login kopieren

Wenn es um die Steuerung geht, sind Schleifenstrukturen unverzichtbar , ähnlich wie PHP:


@for ($i = 0; $i < 10; $i++)
 The current value is {{ $i }}
@endfor
 
@foreach ($users as $user)
 <p>This is user {{ $user->id }}</p>
@endforeach
 
@forelse ($users as $user)
 <li>{{ $user->name }}</li>
@empty
 <p>No users</p>
@endforelse
 
@while (true)
 <p>I&#39;m looping forever.</p>
@endwhile
Nach dem Login kopieren

Blade bietet auch Anweisungen zum Beenden der Iteration oder zum Abbrechen der aktuellen Iteration:


@foreach ($users as $user)
 @if($user->type == 1)
 @continue
 @endif
 
 <li>{{ $user->name }}</li>
 
 @if($user->number == 5)
 @break
 @endif
@endforeach
Nach dem Login kopieren

Sie können auch Anweisungen zum Erreichen der Pause verwenden:


@foreach ($users as $user)
 @continue($user->type == 1)
 
 <li>{{ $user->name }}</li>
 
 @break($user->number == 5)
@endforeach
Nach dem Login kopieren

Einschließlich Unteransichten

Sie können die @include-Direktive verwenden. Um den Inhalt einer Ansicht einzuschließen, werden Variablen in der aktuellen Ansicht auch mit der Unteransicht geteilt:


<p>
 @include(&#39;shared.errors&#39;)
 
 <form>
 <!-- Form Contents -->
 </form>
</p>
Nach dem Login kopieren

Obwohl die Unteransicht automatisch alle Daten von den Variablen der übergeordneten Ansicht erbt, können Sie auch eine Array-Variable direkt übergeben, um der Unteransicht zusätzliche Variablen hinzuzufügen (vermeiden Sie die Verwendung der Konstanten __DIR__ und __FILE__ in Blade-Ansichten, da diese in aufgelöst werden). der Speicherort des Ansichtscache):


@include(&#39;view.name&#39;, [&#39;some&#39; => &#39;data&#39;])
Nach dem Login kopieren

Sie können die @each-Direktive von Blade verwenden, um mehrere Ansichten in einer Zeile zusammenzuführen und einzuführen:


@each(&#39;view.name&#39;, $jobs, &#39;job&#39;)
Nach dem Login kopieren

First Der erste Parameter ist der Name der Ansicht, die für jedes Element im Array oder in der Sammlung gerendert werden muss.

Der zweite Parameter ist ein Array oder eine Sammlung, die zur Bereitstellung der Iteration verwendet wird.

第三个参数是要分配给当前视图的变量名。

你也可以传递第四个参数到 @each 指令。如果所提供的数组是空数组的话,该参数所提供的视图将会被引入。


@each(&#39;view.name&#39;, $jobs, &#39;job&#39;, &#39;view.empty&#39;)
Nach dem Login kopieren

Blade 中的注释,这样写不会被渲染:


{{-- This comment will not be present in the rendered HTML --}}
Nach dem Login kopieren

Blade 允许你在已命名的堆中压入内容:


@push(&#39;scripts&#39;)
 <script src="/example.js"></script>
@endpush
Nach dem Login kopieren

你可以在你需要的时候压入相同的堆任意的次数,你需要在布局中使用 @stack 来渲染堆:


<head>
 <!-- Head Contents -->
 @stack(&#39;scripts&#39;)
</head>
Nach dem Login kopieren

可以使用 @inject 指令来从服务容器中取回服务:


@inject(&#39;metrics&#39;, &#39;App\Services\MetricsService&#39;)
<p>
 Monthly Revenue: {{ $metrice->monthlyRevenue() }}
</p>
Nach dem Login kopieren

第一个参数将作为所取回服务存放的变量名,

第二个参数是你想要在服务容器中取回的类或接口名称。

可以使用 directvie 方法来注册指令。当 Blade 编译器遇到该指令时,它会自动的调用该指令注册时提供的回调函数并传递它的参数。

下面的例子创建了 @datetime($val) 指令来格式化 $val:


<?php
namespace App\Providers;
 
use Blade;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider{
 /**
 * Perform post-registration booting of services.
 *
 * @return void
 */
 public function boot(){
  Blade::directive(&#39;datetime&#39;, function ($expression) {
  return "<?php echo with{$express}->format(&#39;m/d/Y H:i&#39;); ?>";
  });
 }
 
 /**
 * Register bindings in the container
 *
 * @return void
 */
 public function register() {
  //
 }
}
Nach dem Login kopieren

上面的例子中使用了 Laravel 的 with 帮助方法,它只是简单的返回一个所提供的对象或值,并提供方便的链式调用。最终该指令生成的 PHP 代码如下:


<?php echo with($var)->format(&#39;m/d/Y H:i&#39;); ?>
Nach dem Login kopieren

在你更新 Blade 指令的逻辑之后,你应该删除所有已缓存的 Blade 视图,你可以使用 view:clear Artisan 命令来清除。

总结

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Blade-Template-Engine in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate 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)

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel – Artisan-Konsole Laravel – Artisan-Konsole Aug 27, 2024 am 10:51 AM

Laravel – Artisan Console – Das Laravel-Framework bietet drei Haupttools für die Interaktion über die Befehlszeile, nämlich Artisan, Ticker und REPL. In diesem Kapitel wird Artisan ausführlich erläutert.

Laravel – Paginierungsanpassungen Laravel – Paginierungsanpassungen Aug 27, 2024 am 10:51 AM

Laravel – Paginierungsanpassungen – Laravel enthält eine Paginierungsfunktion, die einem Benutzer oder Entwickler hilft, eine Paginierungsfunktion einzubinden. Der Laravel-Paginator ist in den Abfrage-Builder und Eloquent ORM integriert. Die Paginierungsmethode automatisch

Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Apr 01, 2025 pm 02:45 PM

Methode zum Abholen des Rücksendecode, wenn das Senden von Laravel -E -Mails fehlschlägt. Wenn Sie Laravel zur Entwicklung von Anwendungen verwenden, stellen Sie häufig Situationen auf, in denen Sie Überprüfungscodes senden müssen. Und in Wirklichkeit ...

Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Mar 31, 2025 pm 11:24 PM

Laravel -Zeitplan -Aufgabe Ausführen nicht reagierende Fehlerbehebung Bei Verwendung der Zeitplanung von Laravel -Zeitplänen werden viele Entwickler auf dieses Problem stoßen: Zeitplan: Run ...

Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Mar 31, 2025 pm 11:48 PM

Die Methode zum Umgang mit Laravels E -Mail -Versagen zum Senden von Verifizierungscode besteht darin, Laravel zu verwenden ...

So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? Apr 01, 2025 am 07:09 AM

So implementieren Sie die Tabellenfunktion von benutzerdefiniertem Klicken, um Daten in dcatadmin (laravel-admin) hinzuzufügen, wenn Sie DCAT verwenden ...

Laravel – Dump-Server Laravel – Dump-Server Aug 27, 2024 am 10:51 AM

Laravel – Dump-Server – Der Laravel-Dump-Server wird mit der Version von Laravel 5.7 geliefert. Die Vorgängerversionen enthalten keinen Dump-Server. Der Dump-Server wird eine Entwicklungsabhängigkeit in der Laravel-/Laravel-Composer-Datei sein.

See all articles