Come creare facades personalizzate in Laravel 5

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!

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

video-html5
Up Next:

Come recuperare la durata di un video html5 con javascript

Come recuperare la durata di un video html5 con javascript