Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Con blade è possibile costruire – in maniera elastica, dinamica e scalabile nella complessità – pagine che
condividono una determinata struttura.
L’idea è costruire delle pagine, da cui si possono ereditare altre pagine le quali ereditano la struttura di
quelle iniziali.
xyz… 123456678
Si realizza dei file di default, da cui deriviamo dei file che ne manterranno la struttura generale, con tutti gli
elementi che decideremo che dovranno essere ereditati.
Poi introdurremo degli elementi, anch’essi di default, che saranno presenti in tutti i file ereditati, ma che
saranno personalizzati di volta in volta.. infine poi ciascuna pagina potrà avere dettagli specifici suoi.
Inoltre introdurremo anche la possibilità di gestire valori passati come variabili in ciascuna pagina, con
blade – come vedremo.
Non è obblicatorio apporre i file in cartelle specifiche per costruire temi con blade, ma esistono delle
convenzioni utili.
Come ogni vista, anche le viste costruite con Blade vanno poste a partire dal percorso di cartella
resources->views
In genere, si tende a porre le pagine di base, da cui erediteremo poi la struttura, in una struttura di
sottocartella a partire da resources->views . Sovente si realizza una cartella chiamata layouts e li sotto si
costruiscono le views di partenza (in caso di particolari gruppi di file, uteriormente suddividibili per
categorie, si tende a creare ulteriori sottocartelle).
Per l’esempio, creiamo un file chiamato default.blade.php (ma il nome potrebbe essere un altro, a piacere,
purchè contenga il suffisso “.blade” e poi termini con “.php”.
Supponiamo di creare una comune pagina HTML, dal codice estremamente semplificato:
<html>
<head>
<title>App Name</title>
</head>
<body>
</body>
</html>
@extends('layouts.default')
Quindi, se non apportiamo altre modifiche pur essendo il file derivato contenente solo il codice
@extends('layouts.default'), al suo interno conterrà l’intera struttura HTML prima vista
<html>
<head>
<title>App Name</title>
</head>
<body>
</body>
</html>
Con Blade è possibile creare blocchi di codice nella view-layout master, poi modificabili (volendo) nelle
view-layout figlie, creando delle (cosiddette) sezioni.
Una sezione è una porzione di codice racchiusa tra dei delimitatori, a cui diamo un nome.
I delimitatori nella view-layout master sono @section e @show, se vogliamo che la sezione sia visibile e
presente in tutte le nella view-layout figlie; la sezione inizia con il delimitatore @section a cui, tra parentesi,
passiamo una stringa con un nome che diamo alla sezione di codice; quando la sezione che vogliamo
raccogliere tra i delimitatori è finita, si chiude (come detto) con @show:
<html>
<head>
<title>App Name</title>
</head>
<body>
@section('sidebar')
Qui impostiamo una master sidebar: sarà ripetuta, come tutto, in tutte le pagine e sarà
modificabile in esse
@show
</body>
</html>
permette di racchiudere del codice tra dei marker che consentono, successivamente di riprenderlo e
modificarlo in alcuni modi, in modo che il pezzo di codice sarà presente comunque in tutte le pagine ma
potrà essere modificato; Per farlo si può usare il marker section, che consente di dare un nome alla sezione,
inserendolo prima della prima riga della sezione stessa;
Nei file view-layout figli si può riprendere la sezione riscrivendola, ma (generalmente) chiudendo la sezione
non con @show ma con @stop e, a questo punto posso cambiare il contenuto, riscrivendolo ; se non lo
faccio la sezione viene riportata così com’è:
@extendes('layout.default')
@section('sidebar')
Questo contenuto è stato riscritto, così che non venga identico al
master, come invece avverrà per tutto il resto del codice HTML riportato
pari pari
@stop
In pratica, il file view-layout, che abbiamo scritto nella [1] master, qui, si presenta così
mentre il file view-layout figlio, che abbiamo scritto nella [2] , si presenta così
Internamente i due codici HTML che possiamo rilevare sono simili; tutte le parti HTML sono stare
riprodotte, è stato modificato solo la parte della sezione sidebar.
layouts.default.blade.php usingdefault.blade.php
Se vogliamo che venga, conservato – inserendo il codice della sezione originaria – nel file figlio, è sufficiente
aggiungere il comando @parent, nel punto in cui vogliamo che la sezione originaria venga inserita.
Per esempio, potremmo aggiungere nel file layout-figlio un @parent, seguito da un tag BR (per andare a
capo) e poi il codice aggiunto, così:
@extends('layouts.default')
@section('sidebar')
@parent
<br>Questo contenuto è stato aggiunto, così che non venga identico al
master, come invece avverrà per tutto il resto del codice HTML riportato
pari pari
@stop
@yield
E’ anche possibile porre nel documento di default dei marker @yield in cui indicare il nome di una sezione
che, se viene trovate nel file figlio, questa viene inserita nel punto in cui è lo @yield, altrimenti non viene
inserito nulla
@yield(‘contenuto1’)
@yield(‘contenuto2’)
@extends(‘layouts.default’)
<html>
<head>
<title>CORSO LARAVEL :: @yield('titolo')</title>
<style>
body:
{
margin: 0px;
}
</style>
</head>
<body >
@section('sidebar')
<div style="position: relative; left: 0px; top: 0px; width: 100%; height: 30px; background-color:
black"></div>
@show
<div id="content">
@yield('content')
</div>
</body>
</html>
@extends('layouts.default')
@section('sidebar')
@parent
<div style="position: relative; left: 0px; top: 0px; width: 100%; height: 20px; background-
color:#4F4D4D"></div>
@stop
@section('titolo')
BLADE TEST
@stop
@section('content')
tets tets te
t s tets tets te
t s tets tets te
t s
@stop
I componenti
Blade consente di creare componenti, ossia pezzi di codice che salviamo in dei file e che possiamo
richiamare; il nome del componente deve essere parte del nome del file, ossia il nome del file dovrà essere:
<h1>UDITE UDITE</h1>
FILE “striscione.blade.php”
<h1>UDITE UDITE</h1>
@endcomponent
@extends('layouts.default')
@section('sidebar')
@parent
<div style="position: relative; left: 0px; top: 0px; width: 100%; height: 20px; background-
color:#4F4D4D"></div>
@stop
@section('titolo')
BLADE TEST
@stop
@section('content')
tets tets tets tets tets tets tets tets tets
@stop
@component('striscione')
@endcomponent
I componenti vengono renderizzati PRIMA degli altri elementi di BLADE (a meno del codice HTML presente).
@extends('layouts.default')
@section('sidebar')
@parent
<div style="position: relative; left: 0px; top: 0px; width: 100%; height: 20px; background-
color:#4F4D4D"></div>
@stop
@section('titolo')
BLADE TEST
@stop
@section('content')
tets tets tets tets tets tets tets tets tets
@stop
@component('striscione')
@endcomponent
Non ha HTML esterno ai comandi di BLADE, quindi passerà alla renderizzazione prima del componente
“striscione”, producendo il codice
<h1>UDITE UDITE</h1>
E poi produrrà l’HTML derivato e tutto ciò che deriva dai comandi BLADE:
Per esempio potrei voler inviare una variabile al componente, poco fa realizzato, chiamata testo e contente
la stringa “CIAO MONDO”:
@component('striscione')
@slot('testo')
CIAO MONDO
@endslot
@endcomponent
E nel componente la potrei usare così:
<h1>{{$testo}}</h1>
@component('striscione')
@slot('testo')
CIAO MONDO
@endslot
@slot('colore')
green
@endslot
@endcomponent
Approfondimenti
https://www.francescochiriaco.it/laravel-blade-engine/
https://www.massimilianosalerno.it/progettazioneweb/le-view-di-laravel-con-
blade.html#Chiamare_e_passare_dati_a_una_View
https://www.targetweb.it/gestire-il-layout-in-laravel-4-guida-al-blade-template-system/
https://www.oulub.com/it-IT/Laravel/blade#components
https://www.laramind.com/blog/laravel-blade/