CONTATTACI

Guide per aspiranti programmatori

Lezione 14 / 30

View in Laravel

Le view in Laravel sono particolari componenti del framework nei quali è possibile definire e salvare la struttura delle pagine HTML e dei file che verranno effettivamente restituiti dalla risposta HTTP. Ciò consente di separare ulteriormente la logica applicativa (route & controller) dalla logica di presentazione (view).

Le view rendono semplice e immediato costruire pagine HTML complesse senza “intaccare” la pulizia del codice dei vari controller. In questo, inoltre, è possibile distinguere le modifiche alla logica di comportamento, sempre nel controller, dalle modifiche visive del contenuto restituito, che potranno essere, quindi, apportate modificando solo la view.

Risposte HTML

Prima di affrontare nel dettaglio le view di Laravel, proviamo a realizzare una response che, effettivamente, restituisca al client che ne fa richiesta una semplice pagina HTML.

Route::get('/hello', function () {  
  return 'Hello Laravel';
});

In questo modo, abbiamo configurato la rotta per fare return di una stringa che Laravel convertirà in una response HTTP. Verranno, quindi, restituiti al client lo stato (200 OK) e alcuni header necessari. In particolare, Laravel aggiungerà alla risposta l’header Content-Type con valore text/html; charset=UTF-8, indicando, quindi, al client di considerare il contenuto ricevuto come file HTML.

Route::get('/hello', function () {
  return response('Hello Laravel', 200)
    ->header('Content-Type', 'text/plain')
    ->cookie('name', 'value', $minutes);
});

Possiamo essere più espliciti e utilizzare il metodo response per costruire la risposta desiderata. In questo caso, va indicato il contenuto del body della risposta e il codice HTTP. È possibile anche esplicitare eventuali header per rimpiazzare quelli inseriti di default da Laravel o per aggiungerne degli altri.

A differenza della prima versione, stiamo, qui, dicendo che il contenuto restituito è di tipo text/plain. Il browser, in questo caso, non proverà a farne il rendering come HTML.

Ci sono diversi metodi specifici che è possibile mettere in chain al metodo response per costruire la risposta desiderata.

Route::get('/hello', function () {
  return response('<html><body><h1>Hello Laravel</h1></body></html>', 200)
    ->header('Content-Type', 'text/html');
});

Anche il metodo response, però, richiede che venga passato come parametro l’esatto contenuto del body della response sotto forma di stringa. Questo rende particolarmente difficile poter gestire pagine HTML complete e complesse direttamente nella definizione della route o dei controller, poiché dovremmo premurarci di includere nella stringa l’intero sorgente HTML.

Laravel offre la possibilità di ospitare il contenuto HTML da restituire in un file separato tramite le view.

View e logica di presentazione in Laravel

Le view permettono di separare la logica applicativa (che per ora consideriamo essere quanto viene fatto dal controller) dalla logica di presentazione (ovvero come il risultato verrà mostrato a chi ha effettuato la richiesta).

Le view altro non sono che file ospitati nella directory resources/views che costituiranno il contenuto di una risposta. I controller potranno recuperare una certa view tramite una convenzione basata sul nome del file della view e l’uso del metodo view nel controller o nella rotta.

<!-- La view salvata nel file resources/views/hello.blade.php -->

<html>
  <body>
    <h1>Hello Laravel</h1>
    <p>I'm a view</p>
  </body>
</html>
// rotta nel file routes/web.php

Route::get('/hello', function () {
  return view('hello');
});

NOTA: sebbene, per semplicità di stesura, gli esempi di questa lezione usino il metodo view nella definizione della rotta, è, ovviamente, possibile usare tale metodo nella classe controller associata alla rotta.

Nomi delle view e relativi file di risorsa in Laravel

Nella prossima lezione approfondiremo meglio il linguaggio di templating Blade; per ora, è sufficiente ricordare che i file delle view nella directory resources/views debbono avere estensione .blade.php poiché sono a tutti gli effetti dei template di Blade.

Il nome del file corrisponderà, quindi, al nome della view da richiedere nel controller. Nell’esempio precedente, la view ‘hello’ corrisponderà al file resources/views/hello.blade.php.

È possibile creare sottodirectory in resources/views in modo da organizzare le varie view realizzate.

Le view raccolte nelle varie sottodirectory saranno richiamabili dal controller tramite una “dot notation”.

return view(‘user.profile’);

Contenuto directory delle view

Contenuto directory delle view

 

L’organizzazione delle view all’interno della directory resources/views può essere slegata da nomi di controller e path delle URI gestite. Non è, quindi, necessario che la view user.orders e la view admin.orders corrispondano rispettivamente alle URI https://example.com/user/orders e https://example.com/admin/orders.

Passaggio di dati alle view in Laravel

Il meccanismo delle view di Laravel offre, ovviamente, la possibilità di passare dati dinamici alla singola view selezionata. In questo modo, è possibile realizzare contenuti dinamici.

Il file della view, infatti, è un file template, ossia un file che serve da scheletro per costruire l’effettiva risposta in base ai dati ricevuti.

<!-- La view salvata nel file resources/views/hello.blade.php -->

<html>
  <body>
    <h1>Hello {{ $name }}</h1>
    <p>I'm a view</p>
  </body>
</html>
// file routes/web.php

Route::view('/hello', 'hello', ['name' => 'Laravel']);

Route::get('/hello-bis', function () {
  return view('hello', ['name' => 'Laravel']);
});

È possibile passare un array di dati alla view selezionata per rendere tali dati disponibili alla view. Usando le opportune convenzioni, il sistema di rendering dei template sarà in grado di usare tali dati.

Dal punto di vista dell’invocazione del metodo view, i dati da passare devono essere un array di coppie chiave / valore. Sarà possibile accedere ai valori nella view usando la chiave ($name nell’esempio precedente).

Un metodo alternativo per passare dati alla view è tramite il metodo with, che permette di aggiungere singole coppie chiave / valore.

return view('hello')
     ->with('name', 'Laravel')
     ->with('copyright', 2023);

Ciò consente, ad esempio, di strutturare il proprio codice in modo da effettuare all’inizio del codice di un metodo del controller le operazioni necessarie a calcolare i vari valori, associare tali valori ai nomi delle variabili della view in un array e passarli al metodo helper view per generare il contenuto definitivo.

// nella classe controller per la rotta /user/profile

public function userProfile() {
  $userName = $service->getCurrentUserName();


  $data = ['firstName' => $username];

  return view('user.profile', $data);
}

Contattaci senza impegno per informazioni sul corso

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.