Sök…
Introduktion
Laravel stöder Blad-templatormotorn ur lådan. Blade-templateringsmotorn tillåter oss att skapa huvudmallar och underordnade mallar för laddningsinnehåll från huvudmallar, vi kan ha variabler, slingor och villkorliga uttalanden inuti bladfilen.
Visningar: Introduktion
Vyer, i ett MVC-mönster, innehåller logiken för hur man presenterar data för användaren. I en webbapplikation används de vanligtvis för att generera HTML-utdata som skickas tillbaka till användare med varje svar. Som standard lagras vyerna i Laravel i resources/views
.
En vy kan kallas med hjälp av funktionen för view
:
view(string $path, array $data = [])
Hjälparens första parameter är sökvägen till en visningsfil, och den andra parametern är en valfri matris med data som ska skickas till vyn.
För att ringa resources/views/example.php
skulle du använda:
view('example');
Visa filer i undermappar i resources/views
, till exempel resources/views/parts/header/navigation.php
, kan kallas med punktnotation: view('parts.header.navigation');
Inom en visningsfil, till exempel resources/views/example.php
, är du fritt att inkludera både HTML och PHP tillsammans:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
I det föregående exemplet (som inte använder någon Bladespecifik syntax) matar vi ut $name
-namnvariabeln. För att överföra detta värde till vår vy skulle vi skicka en mängd värden när vi kallar visningshjälpen:
view('example', ['name' => $name]);
eller alternativt använda den compact()
hjälpen. I detta fall motsvarar strängen som skickas till kompakt () namnet på den variabel som vi vill skicka till vyn.
view('example', compact('name'));
NAMNINGKONVENTION FÖR BLADVARIABLER
När du skickar data tillbaka för att se. Du kan använda underscore
för variable
med flera ord men med -
laravel ger fel.
Som den här kommer en att ge fel (meddelande hyphen ( - )
inom user-address
view('example',['user-address' => 'Some Address']);
Det rätta sättet att göra detta kommer att vara
view('example', ['user_address' => 'Some Address']);
Kontrollstrukturer
Blad ger bekväm syntax för vanliga PHP-kontrollstrukturer.
Var och en av kontrollstrukturerna börjar med @[structure]
och slutar med @[endstructure]
. Lägg märke till att vi i taggarna bara skriver normal HTML och inkluderar variabler med Blade-syntaxen.
villkors
"If" uttalanden
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
"Om inte" uttalanden
(Kort syntax för 'om inte'.)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
Loops
"While" -slinga
@while (true)
<p>I'm looping forever.</p>
@endwhile
'Foreach'-slinga
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
'Forelse' Loop
(Samma som 'foreach'-slinga, men lägger till ett speciellt @empty
direktiv, som körs när matrisuttrycket som itereras över är tomt, som ett sätt att visa standardinnehåll.)
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
Inom öglor är en speciell $loop
tillgänglig med information om slingans tillstånd:
Fast egendom | Beskrivning |
---|---|
$loop->index | Indexet för den aktuella loop-iterationen (börjar vid 0). |
$loop->iteration | Den aktuella loop-iterationen (börjar vid 1). |
$loop->remaining | De återstående loop-iterationerna. |
$loop->count | Det totala antalet objekt i matrisen som itereras. |
$loop->first | Huruvida detta är den första iterationen genom loopen. |
$loop->last | Huruvida detta är den sista iterationen genom loopen. |
$loop->depth | Häckningsnivån för den aktuella slingan. |
$loop->parent | I en kapslad slinga, föräldrarnas slingvariabel. |
Exempel:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Sedan Laravel 5.2.22 kan vi också använda direktiven @continue
och @break
Fast egendom | Beskrivning |
---|---|
@continue | Stoppa den aktuella iterationen och starta nästa. |
@break | Stoppa den aktuella slingan. |
Exempel:
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
Sedan ( förutsatt att 5+ användare sorteras efter ID och inget ID saknas ) kommer sidan att visas
1 Dave
3 John
4 William
Echoing PHP-uttryck
Alla PHP-uttryck inom dubbla lockiga hängslen {{ $variable }}
kommer att echo
efter att ha körts genom e
hjälparfunktionen . (Så html-specialtecken ( <
, >
, "
, '
, &
) ersätts säkert för motsvarande html-enheter.) (PHP-uttrycket måste utvärdera till sträng, annars kastas ett undantag.)
Echoing en variabel
{{ $variable }}
Echoing ett element i en matris
{{ $array["key"] }}
Echoing en objektegenskap
{{ $object->property }}
Echo resultatet av ett funktionssamtal
{{ strtolower($variable) }}
Kontrollera för existens
Normalt, i PHP, för att kontrollera om en variabel är inställd och skriva ut den du skulle göra
- Innan PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
- Efter PHP 7 (med hjälp av "Null coalescing operator")
<?php echo $variable ?? 'Default'; ?>
Bladoperatör or
gör det enklare:
{{ $variable or 'Default' }}
Rå ekon
Som nämnts filtreras regelbunden syntax med dubbelspol {{ }}
genom PHP: s htmlspecialchars
funktion, för säkerhet (förhindrar skadlig injektion av HTML i vyn). Om du vill kringgå detta beteende, till exempel om du försöker mata ut ett block med HTML-innehåll som är resultatet av ett PHP-uttryck, använd följande syntax:
{!! $myHtmlString !!}
Observera att det anses vara en bra metod att använda standard {{ }}
syntax för att undkomma dina data, såvida det inte är absolut nödvändigt. Dessutom bör du undvika att använda {!! !!}
när du återsätter otillförlitligt innehåll (dvs. innehåll som tillhandahålls av användare av din webbplats). {!! !!}
syntax.
Inklusive delvis utsikt
Med Blade kan du också inkludera partiella vyer (kallad "partier") direkt på en sida så:
@include('includes.info', ['title' => 'Information Station'])
Koden ovan kommer att inkludera vyn på 'vyer / inkluderar / info.blade.php'. Det kommer också att passera i en variabel $title
med värdet 'Information Station'.
I allmänhet har en inkluderad sida åtkomst till alla variabler som den samtalssidan har tillgång till. Om vi till exempel har:
{{$user}} // Outputs 'abc123'
@include('includes.info')
Och 'inkluderar / info.blade.php' har följande:
<p>{{$user}} is the current user.</p>
Sedan kommer sidan att visas:
abc123
abc123 is the current user.
Inkludera varje
Ibland vill du kombinera ett include
uttalande med ett foreach
uttalande och få tillgång till variablerna inom foreach-loopen i inkludera. I det här fallet använder du Blades @each
direktiv:
@each('includes.job', $jobs, 'job')
Den första parametern är sidan som ska inkluderas. Den andra parametern är matrisen att iterera över. Den tredje parametern är den variabel som tilldelas elementen i matrisen. Uttalandet ovan motsvarar:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
Du kan också överföra ett valfritt fjärde argument till @each
direktivet för att ange vyn som ska visas när matrisen är tom.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
Layout ärft
En layout är en visningsfil som utvidgas med andra vyer som injicerar kodblock i deras överordnade. Till exempel:
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
Här ser du två exempel på barnsidor, som var och en förlänger föräldern. @section
definierar en @section
, som infogas i föräldern vid rätt @yield
uttalande.
Så vyn som gjorts av View::make('child')
kommer att säga " This is child page! " I rött, medan View::make('otherpage')
kommer att producera samma html, utom med texten " This is another sidan! "i blått istället.
Det är vanligt att separera visningsfilerna, t.ex. att ha en layoutmapp specifikt för layoutfilerna och en separat mapp för olika specifika vyer.
Layouterna är avsedda att tillämpa kod som ska visas på varje sida, t.ex. att lägga till en sidofält eller rubrik, utan att behöva skriva ut all html-pannplatta i varje enskild vy.
Visningar kan utökas upprepade gånger - dvs. sida3 kan @extend('page2')
och sidan2 kan @extend('page1')
.
Kommandot för @include
använder samma syntax som används för View::make
och @include
, så layouts/main/page.blade.php
nås som layouts.main.page
.
Dela data till alla vyer
Ibland måste du ställa in samma data i många av dina vyer.
Använda View :: dela
// "View" is the View Facade
View::share('shareddata', $data);
Efter detta kommer innehållet i $data
att vara tillgängligt i alla vyer under namnet $shareddata
.
View::share
kallas vanligtvis i en tjänsteleverantör, eller kanske i konstruktören för en controller, så data kommer att delas i vyer som returneras endast av den kontrollenheten.
Använda View :: kompositör
Visakomponister är återuppringningar eller klassmetoder som anropas när en vy återges. Om du har data som du vill vara bunden till en vy varje gång den vyn återges kan en vykomponist hjälpa dig att organisera den logiken på en enda plats. Du kan binda variabel direkt till en viss vy eller till alla vyer.
Stängningsbaserad kompositör
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Klassbaserad kompositör
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Liksom med View::share
är det bäst att registrera kompositörerna i en tjänsteleverantör.
Om du går med kompositörskursmetoden, skulle du ha App/Http/ViewComposers/SomeComposer.php
med:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
Dessa exempel använder '*'
i kompositörregistreringen. Denna parameter är en sträng som matchar de visningsnamn som kompositören ska registreras för ( *
är ett jokertecken). Du kan också välja en enda vy (t.ex. 'home'
) för en grupp rutter under en undermapp (t.ex. 'users.*'
).
Kör godtycklig PHP-kod
Även om det kanske inte är lämpligt att göra något sådant om du tänker strikt separera problem, tillåter php
Bladdirektivet ett sätt att exekvera PHP-kod, till exempel att ställa in en variabel:
@php($varName = 'Enter content ')
(samma som:)
@php
$varName = 'Enter content ';
@endphp
senare:
{{ $varName }}
Resultat:
Ange innehåll