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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow