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ść



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow