Ricerca…


introduzione

Laravel supporta il motore di templatura della lama fuori dalla scatola. Il motore di template di Blade ci consente di creare modelli master e modelli child caricando il contenuto da modelli master, possiamo avere variabili, cicli e istruzioni condizionali all'interno del file blade.

Viste: Introduzione

Le viste, in uno schema MVC, contengono la logica su come presentare i dati all'utente. In un'applicazione Web, in genere vengono utilizzati per generare l'output HTML che viene restituito agli utenti con ciascuna risposta. Per impostazione predefinita, le viste in Laravel sono memorizzate nella directory resources/views .

Una vista può essere chiamata usando la funzione helper view :

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

Il primo parametro dell'helper è il percorso di un file di visualizzazione e il secondo parametro è una matrice facoltativa di dati da passare alla vista.

Pertanto, per chiamare le resources/views/example.php , si utilizzerà:

view('example'); 

Visualizza i file in sottocartelle all'interno della directory resources/views , come resources/views/parts/header/navigation.php , può essere chiamato usando dot notation: view('parts.header.navigation');

All'interno di un file di visualizzazione, come resources/views/example.php , sei libero di includere sia HTML che PHP insieme:

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

Nell'esempio precedente (che non utilizza alcuna sintassi specifica di Blade), emettiamo la variabile $name . Per passare questo valore alla nostra vista, passeremmo una matrice di valori quando chiamiamo l'helper della vista:

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

o in alternativa, utilizzare l'helper compact() . In questo caso, la stringa passata a compact () corrisponde al nome della variabile che vogliamo passare alla vista.

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

CONVENZIONE NOMINATIVO PER VARIABILI DI BLADE

Durante l'invio dei dati alla vista. Puoi usare underscore per variable multi-words ma con - laravel dà errore.

Come questo darà errore (notare il hyphen ( - ) all'interno user-address

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

Il modo corretto di farlo sarà

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

Strutture di controllo

Blade fornisce una comoda sintassi per strutture di controllo PHP comuni.

Ciascuna delle strutture di controllo inizia con @[structure] e termina con @[endstructure] . Si noti che all'interno dei tag, stiamo semplicemente digitando normale HTML e includendo variabili con la sintassi di Blade.

Condizionali

'Se' dichiarazioni

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

'A meno che non dichiarazioni'

(Sintassi breve per "se non").

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

Loops

Ciclo 'While'

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

Ciclo 'Foreach'

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

Ciclo 'Forelse'

(Come il ciclo 'foreach', ma aggiunge una direttiva @empty speciale, che viene eseguita quando l'espressione dell'array iterata su è vuota, come modo per mostrare il contenuto predefinito.)

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

All'interno dei loop, sarà disponibile una speciale variabile $loop , contenente informazioni sullo stato del loop:

Proprietà Descrizione
$loop->index L'indice dell'iterazione del loop corrente (inizia da 0).
$loop->iteration L'iterazione del loop corrente (inizia da 1).
$loop->remaining Le restanti iterazioni del ciclo.
$loop->count Il numero totale di elementi nell'array che viene iterato.
$loop->first Se questa è la prima iterazione del ciclo.
$loop->last Se questa è l'ultima iterazione attraverso il ciclo.
$loop->depth Il livello di annidamento del loop corrente.
$loop->parent Quando si trova in un ciclo annidato, la variabile del ciclo del genitore.

Esempio:

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

Dal momento che Laravel 5.2.22, possiamo anche usare le direttive @continue e @break

Proprietà Descrizione
@continue Interrompe l'iterazione corrente e avvia quella successiva.
@break Interrompe il loop corrente.

Esempio :

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

Quindi ( supponendo che più di 5 utenti siano ordinati per ID e non sia presente alcun ID ) la pagina verrà visualizzata

1 Dave
3 John
4 William

Facendo eco alle espressioni PHP

Qualsiasi espressione PHP all'interno di doppie parentesi graffe {{ $variable }} verrà echo dopo essere stata eseguita attraverso la funzione e helper . (Quindi i caratteri speciali html ( < , > , " , ' , & ) vengono tranquillamente sostituiti per le entità html corrispondenti.) (L'espressione PHP deve valutare la stringa, altrimenti verrà generata un'eccezione).

Echoing una variabile

{{ $variable }}

Echoing di un elemento in una matrice

{{ $array["key"] }}

Echoing di una proprietà dell'oggetto

{{ $object->property }}

Riprendendo il risultato di una chiamata di funzione

{{ strtolower($variable) }}

Controllo dell'esistenza

Normalmente, in PHP, per verificare se una variabile è impostata e stamparla si farebbe

  • Prima di PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
  • Dopo PHP 7 (utilizzando "Null coalescing operator")
<?php echo $variable ?? 'Default'; ?>

L'operatore della lama or lo semplifica:

{{ $variable or 'Default' }}

Echi grezzi

Come accennato, la normale sintassi delle doppie parentesi {{ }} , viene filtrata tramite la funzione htmlspecialchars di PHP, per htmlspecialchars di sicurezza (impedendo l'iniezione dannosa di HTML nella vista). Se si desidera ignorare questo comportamento, ad esempio se si sta tentando di generare un blocco di contenuto HTML risultante da un'espressione PHP, utilizzare la seguente sintassi:

{!! $myHtmlString !!}

Si noti che è considerata una buona pratica utilizzare la sintassi standard {{ }} per evitare i propri dati, a meno che non sia assolutamente necessario. Inoltre, quando si riproducono contenuti non fidati (ad es. Contenuto fornito dagli utenti del proprio sito), si dovrebbe evitare di usare {!! !!} sintassi.

Inclusione di viste parziali

Con Blade, puoi anche includere viste parziali (chiamate "parziali") direttamente in una pagina come questa:

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

Il codice sopra includerà la vista in "views / includes / info.blade.php". Passerà anche in un $title variabile avente valore 'Stazione informazioni'.

In generale, una pagina inclusa avrà accesso a qualsiasi variabile a cui ha accesso la pagina chiamante. Ad esempio, se abbiamo:

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

E 'include / info.blade.php' ha il seguente:

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

Quindi la pagina renderà:

abc123
abc123 is the current user.

Includi Ciascuno

A volte, si desidera combinare un'istruzione include con un'istruzione foreach e accedere alle variabili dall'interno del ciclo foreach nell'include. In questo caso, usa la direttiva @each di Blade:

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

Il primo parametro è la pagina da includere. Il secondo parametro è la matrice da iterare sopra. Il terzo parametro è la variabile assegnata agli elementi dell'array. La dichiarazione di cui sopra è equivalente a:

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

È anche possibile passare un quarto argomento facoltativo alla direttiva @each per specificare la vista da mostrare quando la matrice è vuota.

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

Ereditarietà del layout

Un layout è un file di visualizzazione, che viene esteso da altre viste che iniettano blocchi di codice nel loro genitore. Per esempio:

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

Qui vedete due pagine figlio di esempio, che estendono ciascuna il genitore. Le pagine @section definiscono una @section , che viene inserita nel genitore @yield appropriata.

Quindi la vista renderizzata da View::make('child') dirà " Questa è una pagina figlio! " In rosso, mentre View::make('otherpage') produrrà lo stesso html, tranne con il testo " Questa è un'altra pagina! "in blu invece.

È comune separare i file di visualizzazione, ad esempio disporre di una cartella di layout specifica per i file di layout e una cartella separata per le varie visualizzazioni individuali specifiche.

I layout hanno lo scopo di applicare un codice che dovrebbe apparire su ogni pagina, ad esempio aggiungendo una barra laterale o un'intestazione, senza dover scrivere tutto il codice html in ogni singola visualizzazione.

Le viste possono essere estese ripetutamente, ad esempio page3 can @extend('page2') , e page2 can @extend('page1') .

Il comando estendi usa la stessa sintassi usata per View::make e @include , quindi il layouts/main/page.blade.php file layouts/main/page.blade.php è accessibile come layouts.main.page .

Condivisione di dati a tutte le viste

A volte è necessario impostare gli stessi dati in molte delle visualizzazioni.

Utilizzando View :: share

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

Dopodiché, il contenuto di $data sarà disponibile in tutte le visualizzazioni sotto il nome $shareddata .

View::share viene in genere chiamato in un fornitore di servizi, o forse nel costruttore di un controller, quindi i dati saranno condivisi nelle viste restituite solo da quel controller.

Utilizzando View :: compositore

I compositori di vista sono callback o metodi di classe chiamati quando viene eseguito il rendering di una vista. Se si dispone di dati che si desidera associare a una vista ogni volta che viene visualizzata la vista, un compositore di viste può aiutare a organizzare quella logica in un'unica posizione. È possibile associare direttamente una variabile a una vista specifica oa tutte le viste.

Compositore di chiusura

use Illuminate\Support\Facades\View;

// ...

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

Compositore di classe

use Illuminate\Support\Facades\View;

// ...

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

Come con View::share , è meglio registrare i compositori in un fornitore di servizi.

Se vai con l'approccio della classe del compositore, allora avresti App/Http/ViewComposers/SomeComposer.php con:

use Illuminate\Contracts\View\View;

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

Questi esempi usano '*' nella registrazione del compositore. Questo parametro è una stringa che corrisponde ai nomi di vista per i quali registrare il compositore ( * essendo un carattere jolly). Puoi anche selezionare una vista singola (ad es. 'home' ) di un gruppo di percorsi in una sottocartella (ad es. 'users.*' ).

Esegui codice PHP arbitrario

Anche se potrebbe non essere corretto farlo in una vista se si intende separare strettamente le preoccupazioni, la direttiva php Blade consente un modo per eseguire codice PHP, ad esempio, per impostare una variabile:

@php($varName = 'Enter content ')

(uguale a:)

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

dopo:

{{ $varName }}

Risultato:

Inserisci il contenuto



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow