Skip to content

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".

blade
@forelse ($users as $user)
  <p>Användare: {{ $user->username }}</p>
@empty
  <p>Det finns inga användare</p>
@endforelse

Detta ä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.

php
if (true) {
  // ...
}

->

blade
@if (true)
  {{-- ... --}}
@endif

Det 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.

blade
@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>
@endforeach

Inkludera 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:

blade
@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.

blade
@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.

blade
{{ $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

blade
{{-- 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>
@endsection

Komponenter

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.