Sök…


Introduktion

Laravel stöder Blad-templatormotorn ur lådan. Blade-templateringsmotorn tillåter oss att skapa huvudmallar och underordnade mallar för laddningsinnehåll från huvudmallar, vi kan ha variabler, slingor och villkorliga uttalanden inuti bladfilen.

Visningar: Introduktion

Vyer, i ett MVC-mönster, innehåller logiken för hur man presenterar data för användaren. I en webbapplikation används de vanligtvis för att generera HTML-utdata som skickas tillbaka till användare med varje svar. Som standard lagras vyerna i Laravel i resources/views .

En vy kan kallas med hjälp av funktionen för view :

view(string $path, array $data = [])

Hjälparens första parameter är sökvägen till en visningsfil, och den andra parametern är en valfri matris med data som ska skickas till vyn.

För att ringa resources/views/example.php skulle du använda:

view('example'); 

Visa filer i undermappar i resources/views , till exempel resources/views/parts/header/navigation.php , kan kallas med punktnotation: view('parts.header.navigation');

Inom en visningsfil, till exempel resources/views/example.php , är du fritt att inkludera både HTML och PHP tillsammans:

<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <h1>Welcome!</h1>
        <p>Your name is: <?php echo $name; ?></p>
    </body>
</html>

I det föregående exemplet (som inte använder någon Bladespecifik syntax) matar vi ut $name -namnvariabeln. För att överföra detta värde till vår vy skulle vi skicka en mängd värden när vi kallar visningshjälpen:

view('example', ['name' => $name]);

eller alternativt använda den compact() hjälpen. I detta fall motsvarar strängen som skickas till kompakt () namnet på den variabel som vi vill skicka till vyn.

view('example', compact('name'));

NAMNINGKONVENTION FÖR BLADVARIABLER

När du skickar data tillbaka för att se. Du kan använda underscore för variable med flera ord men med - laravel ger fel.

Som den här kommer en att ge fel (meddelande hyphen ( - ) inom user-address

view('example',['user-address' => 'Some Address']);

Det rätta sättet att göra detta kommer att vara

view('example', ['user_address' => 'Some Address']);

Kontrollstrukturer

Blad ger bekväm syntax för vanliga PHP-kontrollstrukturer.

Var och en av kontrollstrukturerna börjar med @[structure] och slutar med @[endstructure] . Lägg märke till att vi i taggarna bara skriver normal HTML och inkluderar variabler med Blade-syntaxen.

villkors

"If" uttalanden

@if ($i > 10)
    <p>{{ $i }} is large.</p>
@elseif ($i == 10)
    <p>{{ $i }} is ten.</p>
@else
    <p>{{ $i }} is small.</p>
@endif

"Om inte" uttalanden

(Kort syntax för 'om inte'.)

@unless ($user->hasName())
    <p>A user has no name.</p>
@endunless

Loops

"While" -slinga

@while (true)
    <p>I'm looping forever.</p>
@endwhile

'Foreach'-slinga

@foreach ($users as $id => $name)
    <p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach

'Forelse' Loop

(Samma som 'foreach'-slinga, men lägger till ett speciellt @empty direktiv, som körs när matrisuttrycket som itereras över är tomt, som ett sätt att visa standardinnehåll.)

@forelse($posts as $post)
    <p>{{ $post }} is the post content.</p>
@empty
    <p>There are no posts.</p>
@endforelse

Inom öglor är en speciell $loop tillgänglig med information om slingans tillstånd:

Fast egendom Beskrivning
$loop->index Indexet för den aktuella loop-iterationen (börjar vid 0).
$loop->iteration Den aktuella loop-iterationen (börjar vid 1).
$loop->remaining De återstående loop-iterationerna.
$loop->count Det totala antalet objekt i matrisen som itereras.
$loop->first Huruvida detta är den första iterationen genom loopen.
$loop->last Huruvida detta är den sista iterationen genom loopen.
$loop->depth Häckningsnivån för den aktuella slingan.
$loop->parent I en kapslad slinga, föräldrarnas slingvariabel.

Exempel:

@foreach ($users as $user)
  @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

Sedan Laravel 5.2.22 kan vi också använda direktiven @continue och @break

Fast egendom Beskrivning
@continue Stoppa den aktuella iterationen och starta nästa.
@break Stoppa den aktuella slingan.

Exempel:

@foreach ($users as $user)
    @continue ($user->id == 2)
        <p>{{ $user->id }} {{ $user->name }}</p>
    @break ($user->id == 4)
@endforeach

Sedan ( förutsatt att 5+ användare sorteras efter ID och inget ID saknas ) kommer sidan att visas

1 Dave
3 John
4 William

Echoing PHP-uttryck

Alla PHP-uttryck inom dubbla lockiga hängslen {{ $variable }} kommer att echo efter att ha körts genom e hjälparfunktionen . (Så html-specialtecken ( < , > , " , ' , & ) ersätts säkert för motsvarande html-enheter.) (PHP-uttrycket måste utvärdera till sträng, annars kastas ett undantag.)

Echoing en variabel

{{ $variable }}

Echoing ett element i en matris

{{ $array["key"] }}

Echoing en objektegenskap

{{ $object->property }}

Echo resultatet av ett funktionssamtal

{{ strtolower($variable) }}

Kontrollera för existens

Normalt, i PHP, för att kontrollera om en variabel är inställd och skriva ut den du skulle göra

  • Innan PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
  • Efter PHP 7 (med hjälp av "Null coalescing operator")
<?php echo $variable ?? 'Default'; ?>

Bladoperatör or gör det enklare:

{{ $variable or 'Default' }}

Rå ekon

Som nämnts filtreras regelbunden syntax med dubbelspol {{ }} genom PHP: s htmlspecialchars funktion, för säkerhet (förhindrar skadlig injektion av HTML i vyn). Om du vill kringgå detta beteende, till exempel om du försöker mata ut ett block med HTML-innehåll som är resultatet av ett PHP-uttryck, använd följande syntax:

{!! $myHtmlString !!}

Observera att det anses vara en bra metod att använda standard {{ }} syntax för att undkomma dina data, såvida det inte är absolut nödvändigt. Dessutom bör du undvika att använda {!! !!} när du återsätter otillförlitligt innehåll (dvs. innehåll som tillhandahålls av användare av din webbplats). {!! !!} syntax.

Inklusive delvis utsikt

Med Blade kan du också inkludera partiella vyer (kallad "partier") direkt på en sida så:

@include('includes.info', ['title' => 'Information Station'])

Koden ovan kommer att inkludera vyn på 'vyer / inkluderar / info.blade.php'. Det kommer också att passera i en variabel $title med värdet 'Information Station'.

I allmänhet har en inkluderad sida åtkomst till alla variabler som den samtalssidan har tillgång till. Om vi till exempel har:

{{$user}} // Outputs 'abc123'
@include('includes.info')

Och 'inkluderar / info.blade.php' har följande:

<p>{{$user}} is the current user.</p>

Sedan kommer sidan att visas:

abc123
abc123 is the current user.

Inkludera varje

Ibland vill du kombinera ett include uttalande med ett foreach uttalande och få tillgång till variablerna inom foreach-loopen i inkludera. I det här fallet använder du Blades @each direktiv:

@each('includes.job', $jobs, 'job')

Den första parametern är sidan som ska inkluderas. Den andra parametern är matrisen att iterera över. Den tredje parametern är den variabel som tilldelas elementen i matrisen. Uttalandet ovan motsvarar:

@foreach($jobs as $job)
    @include('includes.job', ['job' => $job])
@endforeach

Du kan också överföra ett valfritt fjärde argument till @each direktivet för att ange vyn som ska visas när matrisen är tom.

@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')

Layout ärft

En layout är en visningsfil som utvidgas med andra vyer som injicerar kodblock i deras överordnade. Till exempel:

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

Här ser du två exempel på barnsidor, som var och en förlänger föräldern. @section definierar en @section , som infogas i föräldern vid rätt @yield uttalande.

Så vyn som gjorts av View::make('child') kommer att säga " This is child page! " I rött, medan View::make('otherpage') kommer att producera samma html, utom med texten " This is another sidan! "i blått istället.

Det är vanligt att separera visningsfilerna, t.ex. att ha en layoutmapp specifikt för layoutfilerna och en separat mapp för olika specifika vyer.

Layouterna är avsedda att tillämpa kod som ska visas på varje sida, t.ex. att lägga till en sidofält eller rubrik, utan att behöva skriva ut all html-pannplatta i varje enskild vy.

Visningar kan utökas upprepade gånger - dvs. sida3 kan @extend('page2') och sidan2 kan @extend('page1') .

Kommandot för @include använder samma syntax som används för View::make och @include , så layouts/main/page.blade.php nås som layouts.main.page .

Dela data till alla vyer

Ibland måste du ställa in samma data i många av dina vyer.

Använda View :: dela

// "View" is the View Facade
View::share('shareddata', $data);

Efter detta kommer innehållet i $data att vara tillgängligt i alla vyer under namnet $shareddata .

View::share kallas vanligtvis i en tjänsteleverantör, eller kanske i konstruktören för en controller, så data kommer att delas i vyer som returneras endast av den kontrollenheten.

Använda View :: kompositör

Visakomponister är återuppringningar eller klassmetoder som anropas när en vy återges. Om du har data som du vill vara bunden till en vy varje gång den vyn återges kan en vykomponist hjälpa dig att organisera den logiken på en enda plats. Du kan binda variabel direkt till en viss vy eller till alla vyer.

Stängningsbaserad kompositör

use Illuminate\Support\Facades\View;

// ...

View::composer('*', function ($view) {
    $view->with('somedata', $data);
});

Klassbaserad kompositör

use Illuminate\Support\Facades\View;

// ...

View::composer('*', 'App\Http\ViewComposers\SomeComposer');

Liksom med View::share är det bäst att registrera kompositörerna i en tjänsteleverantör.

Om du går med kompositörskursmetoden, skulle du ha App/Http/ViewComposers/SomeComposer.php med:

use Illuminate\Contracts\View\View;

class SomeComposer
{
    public function compose(View $view)
    {
        $view->with('somedata', $data);
    }
}

Dessa exempel använder '*' i kompositörregistreringen. Denna parameter är en sträng som matchar de visningsnamn som kompositören ska registreras för ( * är ett jokertecken). Du kan också välja en enda vy (t.ex. 'home' ) för en grupp rutter under en undermapp (t.ex. 'users.*' ).

Kör godtycklig PHP-kod

Även om det kanske inte är lämpligt att göra något sådant om du tänker strikt separera problem, tillåter php Bladdirektivet ett sätt att exekvera PHP-kod, till exempel att ställa in en variabel:

@php($varName = 'Enter content ')

(samma som:)

@php
    $varName = 'Enter content ';
@endphp

senare:

{{ $varName }}

Resultat:

Ange innehåll



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow