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