Wprowadzenie
PHP zupełnie dobrze nadaje się do tworzenia szablonów, ma jednak pewne ograniczenia. Instrukcje typu <?php echo $variable; ?>
w co drugiej linijce kodu HTML nie wyglądają zbyt czytelnie.
Silnik szablonów Blade wspomaga pracę z szablonami między innymi poprzez dodanie eleganckiego sposobu na wyświetlanie zmiennych, ułatwienie dziedziczenia layoutów i proste dyrektywy dla instrukcji if
, for
, foreach
itp.
Pliki Blade używają rozszerzenia .blade.php
i znajdują się w katalogu resources/views
.
Wyświetlanie zmiennych
Aby móc wyświetlić w widoku wartość zmiennej, musimy najpierw przekazać ją do widoku. Możemy to zrobić przekazując jako drugi parametr funkcji globalnej view()
tablicę danych.
// routes/web.php
Route::get('/', function () {
return view('index', ['name' => 'John']);
});
W widoku resources/views/index.blade.php
będziemy mieli dostępną zmienną $name
. Możemy wyświelić przypisaną do niej wartość używając podwójnych klamer {{ $name }}
.
// resources/views/index.blade.php
<p>Hello {{ $name }}</p>
Blade podczas kompilacji zamienia {{ $variable }}
na <?php echo htmlspecialchars($variable); ?>
. Funkcja htmlspecialchars() konwertuje znaki specjalne na encje HTML.
Jeśli chcemy żeby została wstawiona jako kod HTML, bez użycia wspomnianej wyżej funkcji, używamy takiej składni:
<p>Hello {!! $name !!}</p>
Struktury kontrolne (@if, @for, @foreach)
Blade udostępnia też dyrektywy, które działają na ten samej zasadzie co zwykłe struktury kontrolne w PHP. Najłatwiej bedzie posłużyć się przykładami:
@if (count($tasks) === 1)
There is one task.
@elseif (count($tasks) > 1)
There are multiple tasks.
@else
There are no tasks.
@endif
@for ($i = 0; $i < 10; $i++)
The number is: {{ $i }}
@endfor
@foreach ($tasks as $task)
<p>{{ $task->title }} - {{ $task->status }}</p>
@endforeach
Layouty
W większości stron internetowych, pewne elementy, takie jak nagłówek czy menu, są takie same na wszystkich podstronach. Blade pomaga utrzymać w tym porządek, na początku zdefinujmy sobie layout w pliku resources/views/layout.blade.php
:
<html>
<head>
<title>Blog</title>
</head>
<body>
<header>
Blog
</header>
@yield('content')
</body>
</html>
Teraz zdefiniujmy sobie plik resources/views/post.blade.php
, który będzie używał tego layoutu:
@extends('layout')
@section('content')
<h1>My first post</h1>
<p>Lorem ipsum dolor sit amet</p>
@endsection
W pierwszej linijce pliku używamy dyrektywy @extends
, która mówi widokowi post.blade.php
, którego layoutu ma używać. Następnie za pomocą dyrektywy @section
definiujemy sekcję content
. Kod zawarty między @section('content')
a @endsection
zostanie wyświetlony w miejscu, w którym w layoutcie użyliśmy dyrektywy @yield('content')
.
W pliku routes/web.php
używamy helpera view()
żeby wyświetlić widok:
Route::get('/blog/post', function () {
return view('post');
});
Możemy zdefiniować dowolną liczbę sekcji w pliku Blade, każda z nich musi mieć unikalną nazwę.
Dołączanie plików (@include)
Blade pozwala też łatwo dołączać pliki za pomocą dyrektywy @include
.
// resources/views/layout.blade.php
<div>
@include('partials.navigation')
<div>
Content
</div>
</div>
Wszystkie zmienne, które dostępne są w pliku layout.blade.php
będą też dostępne w dołączonym widoku partials/navigation.blade.php
.
Można też przekazać zmienne ręcznie, podając je w formie tablicy jako drugi parametr dyrektywy @include
.
@include('partials.button', ['text' => 'Sign up'])
W tej części tutoriala dowiedzieliśmy się jak używać silnika szablonów Blade. W następnej części skonfigurujemy połączenie z bazą danych i stworzymy pierwszą tabelę.