Blade
Laravel Blade är Laravels template motor som har en enkel men kraftfull syntax med många "genvägar" och funktioner som inte vanligtvis inte finns (inte lika enkelt i alla fall) i PHP. Blade-filerna kompileras till PHP-kod som cache:as tills filen ändras.
Den officiella dokumentationen för Blade finns här:
Några generella tips
- Försök ha så lite logik i vyer som möjligt
- Undvik att göra requests, queries etc. i vyer
- Undvik att skapa nya variabler när det inte behövs i vyer
Försök att göra så mycket av detta du kan i tillhörande View Composers.
Exempel @forelse
@forelse är en kombination av if och foreach. Den loopar ut varje $user så länge $users inte är tom, då visar den istället texten "Det finns inga användare".
@forelse ($users as $user)
<p>Användare: {{ $user->username }}</p>
@empty
<p>Det finns inga användare</p>
@endforelseDetta är bara en av många funktioner som man får tillgång till genom att använda Blade.
Blade-direktiv
Istället för att skriva PHP if-else etc. använder man specifik Blade syntax.
if (true) {
// ...
}->
@if (true)
{{-- ... --}}
@endifDet går att skapa egna direktiv. Som exempel innehåller Dusk en samling av direktiv för WordPress och ACF funktionalitet. Här finns en lista med de direktiven som har blivit portade till Dusk: https://github.com/Noboxsolutions/horizon/issues/21
Dokumentationen för hur direktiven fungerar finns här: https://log1x.github.io/sage-directives-docs/
Loop-variabeln
I de flesta loopar, ex. @foreach, har man tillgång till loop variabeln $loop.
Den innehåller nyttiga grejer som
$loop->index, nuvarande iterationens index från 0$loop->iteration, nuvarande iterationen från 1$loop->remaining, antal kvarstående iterationer$loop->count, hur många grejer man ska loopa igenom$loop->even/$loop->odd, om iterationen är jämn eller ojämn$loop->first/$loop->last, om iterationen är den första eller den sista
En fullständig lista finns i dokumentationen för Laravel Blade.
Exempel
Loopar över en array av användare.
@foreach ($users as $user)
@if ($loop->first)
This is the first iteration.
@endif
@if ($loop->last)
This is the last iteration.
@endif
<p>This is user {{ $user->id }}</p>
@endforeachInkludera en mall
Med @include('path.to.template') kan mallar inkluderas in i andra mallar.
Sökvägar använder "dot notation", vilket innebär att en punkt används istället för ett snedstreck.
Vill man importera filen test.blade.php i mappen resources/views/partials görs följande:
@include('partials.test')Direktivet utgår från mappen resources/views som exemplet ovan visar.
Skicka med data
Det går även att skicka in data genom den andra parametern.
@include('partials.example-partial', ['variableName' => 'Variable Value'])
{{-- /resources/views/partials/example-partial.blade.php --}}
<h1>{{ $variableName }}</h1>Ett annat sätt att skicka data till en mall är genom Composers.
Olika varianter av echo
För att göra en sträng synlig i vyn används echo. Det finns tre olika sätt att göra det i Blade:
Varning!
Skriv endast ut innehållet utan escape-ing som du har 100% kontroll över innehåller. Det ska alltså inte komma från användar-input och det gäller även WP-admin.
{{ $some_string }} {{-- Skriver ut variabeln med escaping --}}
{!! $some_string !!} {{-- Skriver ut variabel **utan** escaping --}}
{[ $some_string ]} {{-- Skriver ut variabel med `wp_kses_post()` som escaping --}}Layouter
En layout är en omslutande Blade vy med utbytbara sektioner. Det är användbart vid tillfällen då innehållet är olika, men allt omkring är samma. Exempelvis är header och footer alltid samma, men innehållet huvudinnehållet kan ändras. Vyn layouts/app.blade.php används som bas layout i temat, men det går att skapa layouts för precis vad som helst.
För att skapa en layout skapas en ny Blade-fil i mappen resources/views/layouts. Filen måste inte ligga där för att det ska fungera, men det är bra för strukturen. Inuti mallen placeras @yield(<namn>, [<standardvärde>]) direktivet för att skapa en ny sektion inuti layouten, där den andra parametern är ett frivilligt standardvärde.
För att använda den nya layouten använder man @extend('layouts.<namn>') för att utöka layouten och sedan lägger man till @section anrop för att skriva ut data i de diverse sektionerna i layouten.
Exempel
{{-- resources/views/layouts/my-layout.blade.php --}}
<h1>@yield('title')</h1>
<div class="prose">
@yield('content')
</div>
{{-- resources/views/my-template.blade.php --}}
@extends('layouts.my-layout')
@section('title', 'My title!')
@section('content')
<p>Some text content</p>
@endsectionKomponenter
I Blade går det även att använda egna komponenter vilket öppnar upp nya möjligheter att enkelt skicka data mellan vyer/komponent-filerna. Det gör det även enklare att isolera och återanvända kod.
Man kan läsa mer om komponenter här.