LARAVEL VIEW

Nei precedenti articoli abbiamo accennato più volte alle view, spiegando che rappresentano quella parte dell’applicazione che si occupa della presentazione delle richieste e dei risultati nel browser dell’utente.

Il framework Laravel memorizza le pagine che costituiscono le views dell’applicazione nella cartella resources/views, Il codice seguente potrebbe essere quello di una tipica view:

<!-- View salvata in resources/views/saluti.blade.php -->
<html>
<body>
<h1>Ciao Mondo!</h1>
</body>
</html>​

Per richiamarla è sufficiente creare una route apposita nel file routes/web.php:

Route::view('/saluta','saluti');

oppure, utilizzando la sintassi seguente:

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

Da notare che l’argomento che indica il nome del file contenente la view non necessita della specificazione del suffisso .blade.php .

Il passaggio di parametri ad una view è semplice ed avviene passando i parametri necessari come array associativi (chiave => valore):

Route::view('/saluta','saluti',['nome' => 'Francesco']);

oppure, utilizzando la sintassi seguente:

Route::get('/saluta',function() {
return view('saluti',['nome' => 'Francesco']);
});

Per richiamare un parametro passato, all’interno della view, è sufficiente usare la sintassi messa a disposizione dal blade template engine:

<!-- View salvata in resources/views/saluti.blade.php -->
<html>
<body>
<h1>Ciao {{$nome}}</h1>
</body>
</html>​

Come si evince dal codice sopra, la chiave dell’array è diventata una variabile e viene richiamata racchiudendola tra parentesi graffe. L’utilizzo delle parentesi graffe applica automaticamente la funzione htmlspecialchars che esegue l’escape dei caratteri per evitare attacchi di tipo XSS.

Se si desidera non applicare l’escape dei caratteri, allora è sufficiente richiamare la variabile così: {!! $nome !!}.

Quando si richiama una view, se il suo file è memorizzato in una sotto cartella di resources/views, allora basta specificare le cartelle figlie di views separandole con un punto.  Se per esempio, il percorso completo della  view saluti.blade.php  fosse resources/views/ospiti/saluti.blade.php, allora nel richiamarla si dovrebbe usare ospiti.saluti.

Route::view('/saluta','ospiti.saluti');

oppure, utilizzando la sintassi seguente:

Route::get('/saluta',function() {
return view('ospiti.saluti');
});

DATI COMUNI A TUTTE LE VIEW

Talvolta una o più variabili devono essere passate a tutte le views dell’applicazione, in questo caso può risultare comodo specificarlo a monte, utilizzando il metodo share della “view facade”, per non doverli passare in ogni route. Il modo per condividere i parametri tra  tutte le views è quello di specificarlo all’interno del metodo boot di un provider, se non se ne vuole creare uno nuovo, basta farlo all’interno di AppServiceProvider.

<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('codice', '001');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}

Se non si vuole farlo all’interno di AppServiceProvider, allora occorre creare un nuovo provider, registrare i parametri comuni all’interno del metodo boot, registrare il provider creato nel file config/app.php e il gioco è fatto. Vediamo l’esempio completo:

Utilizzando la riga di comando accediamo alla cartella dell'applicazione

cd laraapp

digitiamo il comando

php artisan make:provider ParametriAppProvider

Editiamo il nuovo file generato app/providers/ParametriAppProvider.php e modifichiamo il suo metodo boot inserendo il codice View::share('codice','001');

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class ParametriAppProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
View::share('codice','001');
}
}

Apriamo ora il file config/app.php e aggiungiamo all'array providers, come ultimo elemento, la classe appena creata secondo la sintassi seguente

App\Providers\ParametriAppProvider::class,

Per effettuare il test, creiamo una semplice view resources\views\testparam\viewcodice.php


<html>
<head><title>Prova parametro codice</title></head>
<body>
Codice:{{$codice}}
</body>
</html>

Creiamo infine la route che richiami la view appena creata in routes/web.php

Route::view('/testp','testparam.viewcodice');

A questo punto digitando nel browser http://laraapp.webserver/testp, comparirà nella pagina la scritta Codice: 001


VIEW COMPOSERS

Le view composers possono essere una callback o un metodo di una classe che saranno richiamati prima che la view alla quale sono collegati venga presentata.

In pratica view composers permette di collegare alla news dei dati prima che questa venga presentata. Vediamo un esempio:

supponiamo di voler creare la view resources/views/testparam/profiloazienda.blade.php, richiamabile utilizzando l’url http://laraapp.webserver/azienda; Quello che occorre fare è collegare alla view i dati dell’azienda per poi formattarli e mostrarli nel browser.

Utilizzando la riga di comando accediamo alla cartella dell’applicazione

cd laraapp

digitiamo il comando

php artisan make:provider ViewServiceProvider

Editiamo il nuovo file generato app/providers/ViewServiceProvider.php e modifichiamo il suo metodo boot inserendo il codice seguente:

/* esempio gestito con una classe view composers */

View::composer('testparam.profiloazienda', 'App\Http\View\Composers\ProfiloAzienda');

/* esempio gestito con una closure */

View::composer('testparam.profiloclosure', function ($view) {
       $azienda = ["azienda"=>["nome"=>"Rossi SRL","piva"=>"012345678981"]];
       $view->with($azienda);
});​

Apriamo ora il file config/app.php e aggiungiamo all’array providers, come ultimo elemento, la classe appena creata secondo la sintassi seguente

App\Providers\ViewServiceProvider::class,

Creiamo ora la classe ProfiloAzienda.php dentro app/Http/View/Composers (non vi è alcun obbligo di usare questo percorso)

<?php


 namespace App\Http\View\Composers;

 use Illuminate\View\View;

 class ProfiloAzienda
 {

    protected $azienda= [“nome”=>”Rossi SRL”,”piva”=>”012345678981″];

   /* metodo che invia i dati alla view */
     pub  lic function compose(View $view)
    {
       $view->with(‘azienda’, $this->azienda);
     }
 }​​

Per effettuare il test, creiamo una semplice view resources\views\testparam\profiloazienda.php (deve avere lo stesso nome dichiarato in ViewServiceProvider)

<html>
<head><title>Prova view composers</title></head>
<body>
Azienda:{{$azienda[“nome”]}}
</body>
</html>

Creiamo infine la route che richiami la view appena creata in routes/web.php

Route::view(‘/azienda’,’testparam.profiloazienda’);

A questo punto digitando nel browser http://laraapp.webserver/azienda, comparirà nella pagina la scritta Azienda: Rossi SRL

In maniera analoga, se si creasse la view resources/views/testparam/profiloclosure.blade.php e gli si associasse una route; i dati dell’azienda verrebbero inviati alla view tramite
la closure registrata in ViewServiceProvider.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *