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