Szukaj…
Wprowadzenie
Laravel obsługuje silnik szablonów Blade po wyjęciu z pudełka. Silnik szablonów Blade pozwala nam tworzyć szablony główne i szablony potomne ładujące zawartość z szablonów głównych, możemy mieć zmienne, pętle i instrukcje warunkowe w pliku blade.
Widoki: Wprowadzenie
Widoki, w strukturze MVC, zawierać logikę, w jaki sposób prezentować dane użytkownikowi. W aplikacji internetowej zwykle są one używane do generowania danych wyjściowych HTML, które są wysyłane z powrotem do użytkowników z każdą odpowiedzią. Domyślnie widoki w Laravel są przechowywane w katalogu resources/views
.
Widok można wywołać za pomocą funkcji pomocnika view
:
view(string $path, array $data = [])
Pierwszy parametr pomocnika to ścieżka do pliku widoku, a drugi parametr to opcjonalna tablica danych, które należy przekazać do widoku.
Dlatego do wywołania resources/views/example.php
użyjesz:
view('example');
Przeglądaj pliki w podfolderach w katalogu resources/views
, takie jak resources/views/parts/header/navigation.php
, można wywołać za pomocą notacji kropkowej: view('parts.header.navigation');
W pliku widoku, takim jak resources/views/example.php
, możesz dołączyć zarówno HTML, jak i PHP razem:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
W poprzednim przykładzie (który nie używa żadnej składni specyficznej dla Blade), wypisujemy zmienną $name
. Aby przekazać tę wartość do naszego widoku, przekażemy tablicę wartości podczas wywoływania pomocnika widoku:
view('example', ['name' => $name]);
lub alternatywnie użyj pomocnika compact()
. W tym przypadku ciąg przekazany do compact () odpowiada nazwie zmiennej, którą chcemy przekazać do widoku.
view('example', compact('name'));
KONWENCJA NAZWOWA DLA ZMIENNYCH OSTRZA
Podczas przesyłania danych z powrotem do wyświetlenia. Możesz użyć underscore
dla variable
zawierającej wiele słów variable
ale używając -
laravel podaje błąd.
W ten sposób da błąd (zauważ hyphen ( - )
w user-address
view('example',['user-address' => 'Some Address']);
Właściwy sposób to zrobić
view('example', ['user_address' => 'Some Address']);
Struktury kontrolne
Blade zapewnia wygodną składnię dla popularnych struktur kontrolnych PHP.
Każda ze struktur kontrolnych zaczyna się od @[structure]
a kończy na @[endstructure]
. Zauważ, że w tagach piszemy po prostu normalny HTML i uwzględniamy zmienne ze składnią Blade.
Warunkowe
Oświadczenia „jeśli”
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
Oświadczenia „chyba że”
(Krótka składnia dla „jeśli nie”).
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
Pętle
Pętla „While”
@while (true)
<p>I'm looping forever.</p>
@endwhile
Pętla „Foreach”
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
Pętla „Forelse”
(To samo co pętla „foreach”, ale dodaje specjalną dyrektywę @empty
, która jest wykonywana, gdy iterowane wyrażenie tablicy jest puste, jako sposób na wyświetlenie domyślnej zawartości).
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
W obrębie pętli dostępna będzie specjalna zmienna $loop
, zawierająca informacje o stanie pętli:
własność | Opis |
---|---|
$loop->index | Indeks bieżącej iteracji pętli (zaczyna się od 0). |
$loop->iteration | Bieżąca iteracja pętli (zaczyna się od 1). |
$loop->remaining | Pozostałe iteracje pętli. |
$loop->count | Całkowita liczba elementów w iterowanej tablicy. |
$loop->first | Czy jest to pierwsza iteracja w pętli. |
$loop->last | Czy jest to ostatnia iteracja w pętli. |
$loop->depth | Poziom zagnieżdżenia bieżącej pętli. |
$loop->parent | W pętli zagnieżdżonej zmienna pętli rodzica. |
Przykład:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Od wersji Laravel 5.2.22 możemy również korzystać z dyrektyw @continue
i @break
własność | Opis |
---|---|
@continue | Zatrzymaj bieżącą iterację i rozpocznij następną. |
@break | Zatrzymaj bieżącą pętlę. |
Przykład:
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
Następnie ( zakładając, że ponad 5 użytkowników jest posortowanych według identyfikatora i brak identyfikatora ) strona zostanie wyświetlona
1 Dave
3 John
4 William
Echoing wyrażeń PHP
Każde wyrażenie PHP w podwójnych nawiasach klamrowych {{ $variable }}
zostanie echo
po uruchomieniu przez funkcję e
helper . (Więc znaki specjalne html ( <
, >
, "
, '
, &
) są bezpiecznie zamieniane na odpowiadające im jednostki html.) (Wyrażenie PHP musi przetworzyć na ciąg znaków, w przeciwnym razie zostanie zgłoszony wyjątek.)
Echo zmiennej
{{ $variable }}
Echo elementu w tablicy
{{ $array["key"] }}
Wywoływanie właściwości obiektu
{{ $object->property }}
Wywoływanie wyniku wywołania funkcji
{{ strtolower($variable) }}
Sprawdzanie istnienia
Zwykle w PHP, aby sprawdzić, czy zmienna jest ustawiona i wydrukować ją, zrobiłbyś to
- Przed PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
- Po PHP 7 (za pomocą „zerowego operatora koalescencyjnego”)
<?php echo $variable ?? 'Default'; ?>
Operator ostrza or
ułatwia to:
{{ $variable or 'Default' }}
Surowe echo
Jak wspomniano, regularna składnia podwójnych nawiasów klamrowych {{ }}
jest filtrowana przez funkcję htmlspecialchars
PHP, dla bezpieczeństwa (zapobiegając złośliwemu wstrzykiwaniu HTML w widoku). Jeśli chcesz ominąć to zachowanie, na przykład jeśli próbujesz wygenerować blok treści HTML wynikający z wyrażenia PHP, użyj następującej składni:
{!! $myHtmlString !!}
Pamiętaj, że najlepszą praktyką jest stosowanie standardowej składni {{ }}
do ucieczki od danych, chyba że jest to absolutnie konieczne. Ponadto, powielając niezaufane treści (tj. Treści dostarczane przez użytkowników witryny), należy unikać korzystania z {!! !!}
składnia.
W tym widoki częściowe
Dzięki Blade możesz także umieszczać częściowe widoki (zwane „częściowymi”) bezpośrednio na stronie w następujący sposób:
@include('includes.info', ['title' => 'Information Station'])
Powyższy kod będzie zawierał widok „views / include / info.blade.php”. Przekaże także zmienną $title
o wartości „Information Station”.
Ogólnie, dołączona strona będzie miała dostęp do dowolnej zmiennej, do której strona wywołująca ma dostęp. Na przykład, jeśli mamy:
{{$user}} // Outputs 'abc123'
@include('includes.info')
I „zawiera / info.blade.php” ma następujące cechy:
<p>{{$user}} is the current user.</p>
Następnie strona wyrenderuje:
abc123
abc123 is the current user.
Uwzględnij każdy
Czasami będziesz chciał połączyć instrukcję include
z instrukcją foreach
i uzyskać dostęp do zmiennych z pętli foreach w instrukcji include. W takim przypadku użyj dyrektywy @each
Blade:
@each('includes.job', $jobs, 'job')
Pierwszym parametrem jest strona do uwzględnienia. Drugi parametr to tablica do iteracji. Trzeci parametr to zmienna przypisana do elementów tablicy. Powyższe stwierdzenie jest równoważne z:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
Możesz także przekazać opcjonalny czwarty argument do dyrektywy @each
aby określić widok, który ma być wyświetlany, gdy tablica jest pusta.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
Dziedziczenie układu
Układ jest plikiem widoku, który jest rozszerzony o inne widoki, które wstrzykują bloki kodu do ich elementu nadrzędnego. Na przykład:
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
Oto dwie przykładowe strony podrzędne, z których każda rozszerza element nadrzędny. Strony potomne definiują @section
, która jest wstawiana do elementu nadrzędnego w odpowiedniej instrukcji @yield
.
Więc widok renderowany przez View::make('child')
powie na czerwono „ This is child page! ”, Podczas gdy View::make('otherpage')
wygeneruje ten sam HTML, z wyjątkiem tekstu „ To jest inny zamiast tego stronę! ”na niebiesko.
Pliki widoków są często rozdzielane, np. Mając folder układów specjalnie dla plików układu i osobny folder dla różnych konkretnych widoków.
Układy mają na celu zastosowanie kodu, który powinien pojawić się na każdej stronie, np. Dodanie paska bocznego lub nagłówka, bez konieczności zapisywania wszystkich szablonów HTML w każdym indywidualnym widoku.
Widoki mogą być wielokrotnie rozszerzony - czyli Strona3 może @extend('page2')
i Strona2 może @extend('page1')
.
Polecenie layouts/main/page.blade.php
używa tej samej składni, co w View::make
i @include
, więc dostęp do układu layouts/main/page.blade.php
można uzyskać jako layouts.main.page
.
Udostępnianie danych wszystkim widokom
Czasami musisz ustawić te same dane w wielu swoich widokach.
Korzystanie z View :: share
// "View" is the View Facade
View::share('shareddata', $data);
Następnie zawartość $data
będzie dostępna we wszystkich widokach pod nazwą $shareddata
.
View::share
jest zwykle wywoływany przez dostawcę usług lub konstruktora kontrolera, więc dane będą udostępniane w widokach zwracanych tylko przez tego kontrolera.
Korzystanie z View :: kompozytor
Kompozytorzy widoków to wywołania zwrotne lub metody klasowe wywoływane podczas renderowania widoku. Jeśli masz dane, które chcesz powiązać z widokiem za każdym razem, gdy ten widok jest renderowany, twórca widoku może pomóc zorganizować tę logikę w jednym miejscu. Możesz bezpośrednio powiązać zmienną z określonym widokiem lub ze wszystkimi widokami.
Kompozytor oparty na zamknięciu
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Kompozytor klasy
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Podobnie jak w przypadku View::share
, najlepiej zarejestrować kompozytorów u usługodawcy.
Jeśli wybierzesz klasę kompozytora, będziesz mieć App/Http/ViewComposers/SomeComposer.php
z:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
W przykładach tych użyto '*'
przy rejestracji kompozytora. Ten parametr jest łańcuchem pasującym do nazw widoków, dla których należy zarejestrować kompozytora ( *
jest symbolem wieloznacznym). Możesz także wybrać pojedynczy widok (np. 'home'
) grupy tras w podfolderze (np. 'users.*'
).
Wykonaj dowolny kod PHP
Chociaż takie postępowanie może być niewłaściwe, jeśli zamierzasz ściśle rozdzielić obawy, dyrektywa php
Blade pozwala na wykonanie kodu PHP, na przykład na ustawienie zmiennej:
@php($varName = 'Enter content ')
(taki sam jak:)
@php
$varName = 'Enter content ';
@endphp
później:
{{ $varName }}
Wynik:
Wpisz treść