Suche…
Einführung
Laravel unterstützt Blade-Templating-Engine aus der Box. Mit der Blade-Template-Engine können wir Master-Templates erstellen und untergeordnete Templates zum Laden von Inhalten aus Master-Templates erstellen. In der Blade-Datei können Variablen, Schleifen und Bedingungsanweisungen enthalten sein.
Ansichten: Einführung
Ansichten in einem MVC-Muster enthalten die Logik, wie dem Benutzer Daten angezeigt werden. In einer Webanwendung werden sie normalerweise zum Generieren der HTML-Ausgabe verwendet, die mit jeder Antwort an die Benutzer zurückgesendet wird. Ansichten in Laravel werden standardmäßig im Verzeichnis resources/views
gespeichert.
Eine Ansicht kann mit der view
Helper-Funktion aufgerufen werden:
view(string $path, array $data = [])
Der erste Parameter des Helpers ist der Pfad zu einer Ansichtsdatei, und der zweite Parameter ist ein optionales Array von Daten, die an die Ansicht übergeben werden.
Um die resources/views/example.php
aufzurufen, würden Sie also Folgendes verwenden:
view('example');
Dateien in Unterordnern im Verzeichnis resources/views
, wie z. B. resources/views/parts/header/navigation.php
, können mit Punktnotation aufgerufen werden: view('parts.header.navigation');
In einer Ansichtsdatei, wie z. B. resources/views/example.php
, können Sie HTML und PHP zusammen hinzufügen:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
Im vorherigen Beispiel (das keine Blade-spezifische Syntax verwendet) geben wir die Variable $name
. Um diesen Wert an unsere Ansicht zu übergeben, übergeben wir beim Aufruf des View-Helpers ein Array von Werten:
view('example', ['name' => $name]);
oder verwenden Sie alternativ den compact()
Helfer. In diesem Fall entspricht der an compact () übergebene String dem Namen der Variablen, die an die Ansicht übergeben werden soll.
view('example', compact('name'));
NAMING-KONVENTION FÜR BLATT-VARIABLEN
Beim Senden von Daten zur Ansicht zurück. Sie können underscore
für variable
mit mehreren Wörtern verwenden variable
aber mit -
laravel gibt Fehler aus.
So wird ein Fehler (Hinweis hyphen ( - )
in der user-address
view('example',['user-address' => 'Some Address']);
Der richtige Weg , dies zu tun, wird sein
view('example', ['user_address' => 'Some Address']);
Kontrollstrukturen
Blade bietet eine komfortable Syntax für gängige PHP-Kontrollstrukturen.
Jede der Kontrollstrukturen beginnt mit @[structure]
und endet mit @[endstructure]
. Beachten Sie, dass wir innerhalb der Tags normales HTML eingeben und Variablen in die Blade-Syntax einbeziehen.
Conditionals
"If" -Anweisungen
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
"Es sei denn" Aussagen
(Kurze Syntax für 'wenn nicht'.)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
Schleifen
'While-Schleife
@while (true)
<p>I'm looping forever.</p>
@endwhile
Foreach-Schleife
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
"Forelse" -Schleife
(Wie 'foreach' -Schleife, fügt jedoch eine spezielle @empty
Direktive hinzu, die ausgeführt wird, wenn der Array-Ausdruck leer ist, um den Standardinhalt anzuzeigen.)
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
Innerhalb von Schleifen steht eine spezielle $loop
Variable zur Verfügung, die Informationen über den Zustand der Schleife enthält:
Eigentum | Beschreibung |
---|---|
$loop->index | Der Index der aktuellen Schleifeniteration (beginnt bei 0). |
$loop->iteration | Die aktuelle Schleifeniteration (beginnt bei 1). |
$loop->remaining | Die verbleibenden Schleifeniterationen. |
$loop->count | Die Gesamtzahl der Elemente im Array, die iteriert werden. |
$loop->first | Ob dies die erste Iteration durch die Schleife ist. |
$loop->last | Ob dies die letzte Iteration durch die Schleife ist. |
$loop->depth | Die Verschachtelungsebene der aktuellen Schleife. |
$loop->parent | In einer verschachtelten Schleife die Schleifenvariable des übergeordneten Objekts. |
Beispiel:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Seit Laravel 5.2.22 können wir auch die Direktiven @continue
und @break
Eigentum | Beschreibung |
---|---|
@continue | Stoppen Sie die aktuelle Iteration und starten Sie die nächste. |
@break | Stoppen Sie die Stromschleife. |
Beispiel:
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
Dann wird die Seite gerendert ( vorausgesetzt, dass mehr als fünf Benutzer nach ID sortiert sind und keine ID fehlt )
1 Dave
3 John
4 William
Echo von PHP-Ausdrücken
Jeder PHP - Ausdruck in doppelten geschweifte Klammern {{ $variable }}
wird echo
ed nachdem sie durch die laufen wird e
- Helferfunktion . (So werden HTML-Sonderzeichen ( <
, >
, "
, '
, &
) für die entsprechenden HTML-Entitäten sicher ersetzt.) (Der PHP-Ausdruck muss als Zeichenfolge ausgewertet werden, andernfalls wird eine Ausnahme ausgelöst.)
Eine Variable wiederholen
{{ $variable }}
Echo eines Elements in einem Array
{{ $array["key"] }}
Echo einer Objekteigenschaft
{{ $object->property }}
Das Ergebnis eines Funktionsaufrufs wiederholen
{{ strtolower($variable) }}
Existenz prüfen
Normalerweise wird in PHP normalerweise geprüft, ob eine Variable gesetzt und gedruckt wurde
- Vor PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
- Nach PHP 7 (mit dem "Null-Koaleszenz-Operator")
<?php echo $variable ?? 'Default'; ?>
Blade Operator or
macht das einfacher:
{{ $variable or 'Default' }}
Rohe Echos
Wie bereits erwähnt, wird die Syntax der doppelten geschweiften Klammern {{ }}
aus Sicherheitsgründen aus der htmlspecialchars
Funktion von PHP herausgefiltert (Verhindern einer böswilligen HTML- htmlspecialchars
in die Ansicht). Wenn Sie dieses Verhalten umgehen möchten, beispielsweise wenn Sie versuchen, einen Block von HTML-Inhalt auszugeben, der aus einem PHP-Ausdruck resultiert, verwenden Sie die folgende Syntax:
{!! $myHtmlString !!}
Beachten Sie, dass es eine bewährte Methode ist, die Standardsyntax {{ }}
zu verwenden, um Ihre Daten zu schützen, sofern dies nicht unbedingt erforderlich ist. Wenn Sie nicht vertrauenswürdige Inhalte (z. B. von Benutzern Ihrer Website bereitgestellte Inhalte) wiedergeben, sollten Sie die Verwendung der {!! !!}
Syntax.
Einschließlich Teilansichten
Mit Blade können Sie auch Teilansichten (so genannte "partials") direkt in eine Seite einbinden:
@include('includes.info', ['title' => 'Information Station'])
Der obige Code enthält die Ansicht unter 'views / includes / info.blade.php'. Es wird auch eine Variable $title
mit dem Wert 'Information Station' übergeben.
Im Allgemeinen hat eine eingeschlossene Seite Zugriff auf alle Variablen, auf die die aufrufende Seite Zugriff hat. Wenn wir zum Beispiel haben:
{{$user}} // Outputs 'abc123'
@include('includes.info')
Und 'Includes / info.blade.php' hat folgendes:
<p>{{$user}} is the current user.</p>
Dann wird die Seite gerendert:
abc123
abc123 is the current user.
Jedes einschließen
Manchmal möchten Sie eine include
Anweisung mit einer foreach
Anweisung kombinieren und auf die Variablen innerhalb der foreach-Schleife im include zugreifen. Verwenden Sie in diesem Fall die @each
Direktive von Blade:
@each('includes.job', $jobs, 'job')
Der erste Parameter ist die einzuschließende Seite. Der zweite Parameter ist das zu iterierende Array. Der dritte Parameter ist die den Elementen des Arrays zugewiesene Variable. Die obige Aussage entspricht:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
Sie können der @each
Direktive auch ein optionales viertes Argument @each
, um die Ansicht anzugeben, die @each
, wenn das Array leer ist.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
Vererbung des Layouts
Ein Layout ist eine Ansichtsdatei, die um andere Ansichten erweitert wird, die Codeblöcke in ihr übergeordnetes Element einfügen. Zum Beispiel:
parent.blade.php:
<html>
<head>
<style type='text/css'>
@yield('styling')
</style>
</head>
<body>
<div class='main'>
@yield('main-content')
</div>
</body>
</html>
child.blade.php:
@extends('parent')
@section('styling')
.main {
color: red;
}
@stop
@section('main-content')
This is child page!
@stop
otherpage.blade.php:
@extends('parent')
@section('styling')
.main {
color: blue;
}
@stop
@section('main-content')
This is another page!
@stop
Hier sehen Sie zwei beispielhafte untergeordnete Seiten, die jeweils die übergeordneten Seiten erweitern. Die @section
Seiten definieren ein @section
, das bei der entsprechenden @yield
Anweisung in das übergeordnete @yield
eingefügt wird.
Die Ansicht, die von View::make('child')
gerendert wird, sagt also " This is child page! " In rot, während View::make('otherpage')
dieselbe HTML View::make('otherpage')
erzeugt, außer mit dem Text " Dies ist ein anderer Seite! "stattdessen in blau.
Es ist üblich, die Ansichtsdateien voneinander zu trennen, z. B. mit einem Layouts-Ordner für die Layoutdateien und einem separaten Ordner für die verschiedenen spezifischen Ansichten.
Die Layouts sollen den Code anwenden, der auf jeder Seite angezeigt werden soll, z. B. Hinzufügen einer Seitenleiste oder eines Headers, ohne dass die HTML-Boilerplate in jeder einzelnen Ansicht geschrieben werden muss.
Ansichten können wiederholt erweitert werden, dh page3 kann @extend('page2')
und page2 kann @extend('page1')
.
Der Befehl zum Erweitern verwendet dieselbe Syntax wie für View::make
und @include
, daher wird auf die Datei layouts/main/page.blade.php
als layouts.main.page
.
Daten für alle Ansichten freigeben
Manchmal müssen Sie in vielen Ansichten die gleichen Daten festlegen.
View :: share verwenden
// "View" is the View Facade
View::share('shareddata', $data);
Danach steht der Inhalt von $data
in allen Ansichten unter dem Namen $shareddata
.
View::share
wird normalerweise in einem Dienstanbieter oder möglicherweise im Konstruktor eines Controllers aufgerufen. Daher werden die Daten nur in Ansichten geteilt, die nur von diesem Controller zurückgegeben werden.
View :: composer verwenden
View-Komponisten sind Callbacks oder Klassenmethoden, die beim Rendern einer View aufgerufen werden. Wenn Sie Daten haben, die bei jeder Wiedergabe dieser Ansicht an eine Ansicht gebunden werden sollen, kann ein View-Composer Ihnen dabei helfen, diese Logik an einem einzigen Ort zu organisieren. Sie können Variablen direkt an eine bestimmte Ansicht oder an alle Ansichten binden.
Closure-basierter Komponist
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Klassenbasierter Komponist
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Wie bei View::share
ist es am besten, die Komponisten bei einem Dienstanbieter zu registrieren.
Wenn Sie den Ansatz der Composer-Klasse verwenden, haben Sie App/Http/ViewComposers/SomeComposer.php
mit:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
Diese Beispiele verwenden '*'
in der Composer-Registrierung. Dieser Parameter ist eine Zeichenfolge, die mit den Namen der Ansicht übereinstimmt, für die der Komponist registriert werden soll ( *
als Platzhalter). Sie können auch eine einzelne Ansicht (z. B. 'home'
) einer Gruppe von Routen unter einem Unterordner auswählen (z. B. 'users.*'
).
Beliebigen PHP-Code ausführen
Obwohl es möglicherweise nicht angemessen ist, eine solche Ansicht in einer Ansicht auszuführen, wenn Sie die Bedenken strikt voneinander trennen möchten, ermöglicht die Blade-Direktive von php
eine Möglichkeit, PHP-Code auszuführen, beispielsweise um eine Variable zu setzen:
@php($varName = 'Enter content ')
(gleich wie:)
@php
$varName = 'Enter content ';
@endphp
später:
{{ $varName }}
Ergebnis:
Inhalt eingeben