Nella guida di oggi affrontiamo le Facades di Laravel 5, scopriamo insieme cosa sono, quando usarle e come creare facades personalizzate in laravel 5.
Nella guida laravel 5 in italiano di oggi andremo a creare una facades personalizzata in Laravel 5.
Più precisamente andremo a creare una comoda classe di Helper da poter richiamare ovunque, ad esempio per recuperare un dato da una tabella di opzioni o per effettuare elaborazioni particolari.
Che cosa sono le Facades?
In italiano potremmo tradurre facades con “facciate”, in design complessi e nella programmazione software è un pattern strutturale che definisce un’interfaccia semplificata di un sottosistema molto più complesso.
Il pattern è basato sulla creazione di una semplice interfaccia che agisce per appunto da “facciata” per la collezione delle logiche e dei metodi richiesti.
Una delle caratteristiche principali di una facades è la gestione delle dipendenze dinamiche e selettive nonchè la modalità di uso e registrazione rispetto ai contracts.
Al suo interno laravel utilizza in egual modo Facades o Contracts.
Differenze tra Facades e Contracts in Laravel 5
Dal punto di vista della “performance” usare facades o contracts è praticamente la stessa cosa, tuttavia, se il “pacchetto” che state sviluppando dovrà essere reso disponibile poi per framework all’infuori dell’ecosistema Laravel dovreste tuttavia valutare di utilizzare i contract anzichè la facades.
Per maggiori informazioni consultate questa documentazione ufficiale.
Come creare facades personalizzate in laravel 5
Iniziamo ora a creare la nostra prima facades personalizzata in laravel. Per prima cosa andiamo a creare il file di classe Helper.php all’interno della cartella App.
<?php
namespace App\Helper;
class Helper {
public function test($data = [])
{
echo "Test Facades ok! Targetweb.it";
}
}
Al suo interno come vedete in questo caso ho aggiunto una semplice funzione che se richiamata, restituisce “Test Facades ok! Targetweb.it”.
Il nostro obbiettivo finale è avere quell’output se andremo a digitare (in una views o in un controller:
{{ Helper::test() }}
Perfetto, andiamo ora a creare il nostro Service Provider. Se non hai idea di cosa si tratta ti invito a leggere la documentazione ufficiale sulla struttura dei service provider di Laravel 5 a questo indirizzo.
php artisan make:provider 'HelperServiceProvider'
All’interno del file che si sarà generato dentro la cartella App/Providers andiamo a popolare il nostro provider:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\App;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
App::bind('helper', function()
{
return new \App\Helper\Helper;
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
In questo modo andiamo a registrare la classe Helper nel service provider di avvio rendendolo disponibile sempre in auto-load.
Andiamo a creare ora una cartella dentro App chiamata “Facades”. Aggiungiamo al suo interno un file Helper.php
<?php
//Crea: App\Facades\Helper.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Helper extends Facade{
protected static function getFacadeAccessor() {
return 'helper';
}
}
Come vedete qui sopra abbiamo indicato in primo luogo le dipendenze con use Illuminate\ etc dopodichè siamo andati ad estendere la Facades di base con la nostra.
A questo punto dobbiamo registrare la facades, per farlo apriamo il file config/app.php e aggiungiamola come segue:
//File config/app.php
//Registro servizio
App\Providers\HelperServiceProvider::class,
//Registro alias Facade
'Helper' => App\Facades\Helper::class,
L’ultimo passaggio importante quando aggiungete una facades è quello di ri-definire l’autoload di composer. Di fatto composer quando aggiorniamo la nostra app laravel va a creare automaticamente una versione ottimizzata con tutti i nostri pacchetti e dipendenze.
Qualora saltaste questo passaggio anche se correttamente registrata la vostra facades vi darà sempre errore (del tipo class Helper not found).
//Da terminale è importante dare un dump-autoload per rendere disponibili le modifiche nell'auto loader di laravel
composer dump-autoload
A questo punto siamo pronti per testare, apriamo una qualsiasi view della nostra app e testiamo:
//Dentro una qualsiasi view
{{ Helper::test() }}
//Stampa a schermo: Test Facades ok! Targetweb.it
Và da sè che l’utilizzo di una facades rende il nostro codice estremamente scalabile e aggiornabile con il minimo sforzo. Pensiamo ad esempio all’inclusione di una nuova dipendenza, al posto di modificare (e ri-testare) 100 files grazie a questo sistema andiamo ad aggiungere quello che ci serve solo alla classe Helper.php.
<?php
namespace App\Helper;
use App\Page;
use App\Option;
use Pacchetto\ThirdParty;
class Helper {
....
Se questo articolo ti è stato utile condividilo sui tuoi social network preferiti oppure lascia la tua opinione qui sotto nei commenti.
Hai bisogno di una consulenza Laravel o sei alla ricerca di uno sviluppatore laravel? Contattami!