Zoeken…


Invoering

Laravel ondersteunt Blade templating engine uit de doos. Met de Blade templating engine kunnen we mastersjablonen maken en onderliggende sjablonen laden om inhoud van mastersjablonen te laden. We kunnen variabelen, lussen en voorwaardelijke verklaringen in het bladebestand hebben.

Bekeken: Inleiding

Weergaven, in een MVC-patroon, bevatten de logica voor het presenteren van gegevens aan de gebruiker. In een webtoepassing worden ze meestal gebruikt om de HTML-uitvoer te genereren die bij elke reactie naar gebruikers wordt teruggestuurd. Standaard worden weergaven in Laravel opgeslagen in de map resources/views .

Een weergave kan worden opgeroepen met behulp van de view :

view(string $path, array $data = [])

De eerste parameter van de helper is het pad naar een weergavebestand en de tweede parameter is een optionele gegevensreeks die aan de weergave moet worden doorgegeven.

Om de resources/views/example.php aan te roepen, zou je daarom het volgende gebruiken:

view('example'); 

Bekijk bestanden in submappen in de map resources/views , zoals resources/views/parts/header/navigation.php , kan worden opgeroepen met behulp van puntnotatie: view('parts.header.navigation');

In een weergavebestand, zoals resources/views/example.php , kunt u zowel HTML als PHP samen opnemen:

<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <h1>Welcome!</h1>
        <p>Your name is: <?php echo $name; ?></p>
    </body>
</html>

In het vorige voorbeeld (waarbij geen Blade-specifieke syntaxis wordt gebruikt) voeren we de variabele $name . Om deze waarde aan ons zicht door te geven, zouden we een reeks waarden doorgeven wanneer we de viewhelper aanroepen:

view('example', ['name' => $name]);

of gebruik als alternatief de compact() helper. In dit geval komt de tekenreeks die is doorgegeven aan compact () overeen met de naam van de variabele die we aan de weergave willen doorgeven.

view('example', compact('name'));

NAAMCONVENTIE VOOR BLADVARIABELEN

Tijdens het terugsturen van gegevens om te bekijken. U kunt het underscore voor meerdere woorden variable maar met - laravel geeft fout.

Zoals deze geeft een fout (let op hyphen ( - ) in het user-address

view('example',['user-address' => 'Some Address']);

De juiste manier om dit te doen zal zijn

view('example', ['user_address' => 'Some Address']);

Besturingsstructuren

Blade biedt handige syntaxis voor veelgebruikte PHP-besturingsstructuren.

Elk van de besturingsstructuren begint met @[structure] en eindigt met @[endstructure] . Merk op dat we binnen de tags gewoon normale HTML typen en variabelen opnemen met de Blade-syntaxis.

Voorwaardelijke

'If'-verklaringen

@if ($i > 10)
    <p>{{ $i }} is large.</p>
@elseif ($i == 10)
    <p>{{ $i }} is ten.</p>
@else
    <p>{{ $i }} is small.</p>
@endif

'Tenzij' uitspraken

(Korte syntaxis voor 'zo niet'.)

@unless ($user->hasName())
    <p>A user has no name.</p>
@endunless

Loops

'Herhalingslus

@while (true)
    <p>I'm looping forever.</p>
@endwhile

'Foreach'-lus

@foreach ($users as $id => $name)
    <p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach

'Forelse'-lus

(Hetzelfde als de lus 'foreach', maar voegt een speciale @empty instructie toe, die wordt uitgevoerd wanneer de herhaalde @empty leeg is, als een manier om standaardinhoud weer te geven.)

@forelse($posts as $post)
    <p>{{ $post }} is the post content.</p>
@empty
    <p>There are no posts.</p>
@endforelse

Binnen loops zal een speciale $loop variabele beschikbaar zijn die informatie bevat over de status van de loop:

Eigendom Beschrijving
$loop->index De index van de huidige lus-iteratie (begint bij 0).
$loop->iteration De huidige lusherhaling (begint bij 1).
$loop->remaining De resterende lus-iteraties.
$loop->count Het totale aantal items in de array dat wordt herhaald.
$loop->first Of dit de eerste iteratie door de lus is.
$loop->last Of dit de laatste iteratie door de lus is.
$loop->depth Het nestniveau van de huidige lus.
$loop->parent In een geneste lus, de lusvariabele van de ouder.

Voorbeeld:

@foreach ($users as $user)
  @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

Sinds Laravel 5.2.22 kunnen we ook de richtlijnen @continue en @break

Eigendom Beschrijving
@continue Stop de huidige iteratie en start de volgende.
@break Stop de huidige lus.

Voorbeeld:

@foreach ($users as $user)
    @continue ($user->id == 2)
        <p>{{ $user->id }} {{ $user->name }}</p>
    @break ($user->id == 4)
@endforeach

Vervolgens ( ervan uitgaande dat 5+ gebruikers op ID zijn gesorteerd en er geen ID ontbreekt ) wordt de pagina weergegeven

1 Dave
3 John
4 William

Echo van PHP-expressies

Elke PHP-uitdrukking tussen dubbele accolades {{ $variable }} zal worden echo nadat deze door de e helperfunctie is gegaan . (Dus speciale HTML-tekens ( < , > , " , ' , & ) worden veilig vervangen voor de overeenkomstige HTML-entiteiten.) (De PHP-expressie moet een string zijn, anders wordt een uitzondering gegenereerd.)

Een variabele echoën

{{ $variable }}

Een element in een array echoën

{{ $array["key"] }}

Echo van een objecteigenschap

{{ $object->property }}

Echo van het resultaat van een functieaanroep

{{ strtolower($variable) }}

Controleren op bestaan

Normaal gesproken kunt u in PHP controleren of een variabele is ingesteld en deze afdrukken

  • Voor PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
  • Na PHP 7 (met de "Null coalescing operator")
<?php echo $variable ?? 'Default'; ?>

Blade-operator or maakt dit eenvoudiger:

{{ $variable or 'Default' }}

Rauwe echo's

Zoals vermeld, worden reguliere dubbele accolades syntaxis {{ }} , gefilterd door de htmlspecialchars functie van PHP, voor de veiligheid (het voorkomen van schadelijke injectie van HTML in de weergave). Als u dit gedrag wilt omzeilen, bijvoorbeeld als u probeert een blok HTML-inhoud als resultaat van een PHP-expressie uit te voeren, gebruikt u de volgende syntaxis:

{!! $myHtmlString !!}

Houd er rekening mee dat het wordt aanbevolen om de standaard {{ }} syntaxis te gebruiken om aan uw gegevens te ontsnappen, tenzij dit absoluut noodzakelijk is. Wanneer u niet-vertrouwde inhoud echoert (dat wil zeggen inhoud die wordt geleverd door gebruikers van uw site), moet u bovendien voorkomen dat u de {!! !!} syntaxis.

Inclusief gedeeltelijke weergaven

Met Blade kunt u ook gedeeltelijke weergaven ('gedeeltelijke' genoemd) rechtstreeks in een pagina als volgt opnemen:

@include('includes.info', ['title' => 'Information Station'])

De bovenstaande code bevat de weergave bij 'views / omvat / info.blade.php'. Het geeft ook een variabele $title met de waarde 'Information Station' door.

Over het algemeen heeft een opgenomen pagina toegang tot elke variabele waartoe de oproepende pagina toegang heeft. Als we bijvoorbeeld:

{{$user}} // Outputs 'abc123'
@include('includes.info')

En 'omvat / info.blade.php' heeft het volgende:

<p>{{$user}} is the current user.</p>

Vervolgens wordt de pagina weergegeven:

abc123
abc123 is the current user.

Elk opnemen

Soms wilt u een include instructie combineren met een foreach instructie en toegang krijgen tot de variabelen vanuit de foreach-lus in de include. Gebruik in dit geval Blade's @each richtlijn:

@each('includes.job', $jobs, 'job')

De eerste parameter is de op te nemen pagina. De tweede parameter is de array die moet worden herhaald. De derde parameter is de variabele die is toegewezen aan de elementen van de array. Bovenstaande verklaring is gelijk aan:

@foreach($jobs as $job)
    @include('includes.job', ['job' => $job])
@endforeach

U kunt ook een optioneel vierde argument doorgeven aan de @each richtlijn om de weergave op te geven die moet worden weergegeven als de array leeg is.

@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')

Indeling overerving

Een lay-out is een weergavebestand, dat wordt uitgebreid met andere weergaven die blokken code in hun bovenliggende invoegen. Bijvoorbeeld:

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 ziet u twee voorbeeldonderliggende pagina's, die elk het bovenliggende element uitbreiden. De onderliggende pagina's definiëren een @section , die in het bovenliggende @yield wordt ingevoegd bij de juiste @yield instructie.

Dus de weergave die wordt weergegeven door View::make('child') zal in rood " Dit is onderliggende pagina! " Zeggen, terwijl View::make('otherpage') dezelfde html zal produceren, behalve met de tekst " This is another pagina! "in plaats daarvan in het blauw.

Het is gebruikelijk om de weergavebestanden te scheiden, bijvoorbeeld met een lay-outmap specifiek voor de lay-outbestanden en een aparte map voor de verschillende specifieke individuele weergaven.

De lay-outs zijn bedoeld om code toe te passen die op elke pagina moet verschijnen, bijvoorbeeld door een zijbalk of koptekst toe te voegen, zonder alle html-boilerplate in elke individuele weergave te moeten wegschrijven.

Weergaven kunnen herhaaldelijk worden uitgebreid - dat wil zeggen page3 kan @extend('page2') en page2 can @extend('page1') .

De opdracht @include gebruikt dezelfde syntaxis die wordt gebruikt voor View::make en @include , zodat de bestandslay- layouts/main/page.blade.php toegankelijk zijn als layouts.main.page .

Gegevens delen met alle weergaven

Soms moet u in veel van uw weergaven dezelfde gegevens instellen.

Beeld gebruiken :: delen

// "View" is the View Facade
View::share('shareddata', $data);

Hierna is de inhoud van $data in alle weergaven beschikbaar onder de naam $shareddata .

View::share wordt meestal in een serviceprovider genoemd, of misschien in de constructor van een controller, dus de gegevens worden alleen gedeeld in weergaven die door die controller worden geretourneerd.

Beeld :: componist gebruiken

Weergavecomponisten zijn callbacks of klassemethoden die worden opgeroepen wanneer een weergave wordt weergegeven. Als u gegevens hebt die u wilt binden aan een weergave telkens wanneer die weergave wordt weergegeven, kan een weergavecomponist u helpen die logica op één locatie te organiseren. U kunt de variabele direct binden aan een specifieke weergave of aan alle weergaven.

Op sluiting gebaseerde componist

use Illuminate\Support\Facades\View;

// ...

View::composer('*', function ($view) {
    $view->with('somedata', $data);
});

Op klasse gebaseerde componist

use Illuminate\Support\Facades\View;

// ...

View::composer('*', 'App\Http\ViewComposers\SomeComposer');

Net als bij View::share kunt u de componisten het beste registreren bij een serviceprovider.

Als je App/Http/ViewComposers/SomeComposer.php benadering van de componistenklasse, dan zou je App/Http/ViewComposers/SomeComposer.php met:

use Illuminate\Contracts\View\View;

class SomeComposer
{
    public function compose(View $view)
    {
        $view->with('somedata', $data);
    }
}

Deze voorbeelden gebruiken '*' in de registratie van de componist. Deze parameter is een tekenreeks die overeenkomt met de weergavenamen waarvoor de componist moet worden geregistreerd ( * zijnde een jokerteken). U kunt ook een enkele weergave (bijvoorbeeld 'home' ) van een groep routes onder een submap (bijvoorbeeld 'users.*' ) Selecteren.

Voer willekeurige PHP-code uit

Hoewel het misschien niet juist is om zoiets in een view te doen als je van plan bent om zorgen strikt te scheiden, biedt de php Blade-richtlijn een manier om bijvoorbeeld PHP-code uit te voeren om een variabele in te stellen:

@php($varName = 'Enter content ')

(hetzelfde als:)

@php
    $varName = 'Enter content ';
@endphp

later:

{{ $varName }}

Resultaat:

Voer inhoud in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow