Cos’è un pacchetto
In Laravel un pacchetto è un pacchetto Composer che aggiunge funzionalità all’applicazione. Ne esistono principalmente due tipi.- Pacchetto standalone — libreria PHP generica non dipendente da Laravel (es. Carbon, Pest)
- Pacchetto Laravel — pacchetto integrato con Laravel che offre rotte, controller, view, configurazione, ecc.
Per scrivere i test di un pacchetto usi Orchestra Testbench. Ti permette di scrivere i test del pacchetto come faresti in una normale applicazione Laravel.
Auto-discovery dei pacchetti
Quando installi un pacchetto, Laravel legge la sezioneextra.laravel del composer.json e registra automaticamente service provider e facade.
bootstrap/providers.php: il pacchetto viene caricato automaticamente.
Disabilitare l’auto-discovery
Se l’utente vuole disabilitare l’auto-discovery per un pacchetto specifico, imposta ilcomposer.json dell’applicazione.
Ruolo del service provider
Il service provider è il punto di ingresso del pacchetto. Concentra qui la registrazione delle risorse — view, config, migrazioni, rotte — in Laravel. EstendeIlluminate\Support\ServiceProvider e ha due metodi: register e boot.
Pubblicare i file di configurazione
publishes() — pubblicare i file
Chiamandopublishes() in boot, l’utente può copiare i file di configurazione nella propria app con vendor:publish.
mergeConfigFrom() — fondere con i valori di default
ConmergeConfigFrom() in register, i default del pacchetto si applicano anche se l’utente non ha pubblicato il file.
Separare i gruppi di pubblicazione con i tag
Passando un tag come secondo argomento dipublishes(), l’utente pubblica solo le risorse desiderate.
Registrare rotte
Carica i file delle rotte conloadRoutesFrom(). Se la cache delle rotte dell’app è attiva, viene automaticamente saltato.
Pubblicare le migrazioni
ConpublishesMigrations() puoi pubblicare i file di migrazione. Al momento della pubblicazione Laravel aggiorna automaticamente il timestamp.
Pubblicare le view
loadViewsFrom() — registrare le view
ConloadViewsFrom() registri la directory delle view. Usa il namespace del secondo argomento per riferirti alle view come package::view.
resources/views/vendor/courier dell’app, poi nella directory view del pacchetto. Questo permette all’utente di personalizzarle.
Pubblicare le view
Registrare componenti Blade
Se includi componenti nel pacchetto li registri inboot.
Pubblicare i file di traduzione
Registri i file di traduzione conloadTranslationsFrom(). Le traduzioni si referenziano nella forma package::file.key.
loadJsonTranslationsFrom().
Registrare comandi
I comandi Artisan del pacchetto si registrano con il metodocommands(). Di solito solo in ambiente console.
Integrazione con il comando optimize
Se il pacchetto ha una sua cache, con il metodooptimizes() puoi integrarti con php artisan optimize e php artisan optimize:clear.
Aggiungere informazioni al comando about
Per aggiungere informazioni del pacchetto all’output di php artisan about usa AboutCommand::add().
Creare un facade
Un facade permette di richiamare i binding del service container come metodi statici.1
Creare la classe di servizio
2
Creare la classe facade
Estendi
Illuminate\Support\Facades\Facade e restituisci in getFacadeAccessor() la chiave di binding del container.3
Fai il binding nel service provider
4
Registrare in composer.json
@method ai metodi del facade abiliti l’autocompletamento dell’IDE.
DeferrableProvider — implementare il caricamento differito
I provider che eseguono solo binding nel container possono realizzare il caricamento differito implementando l’interfacciaDeferrableProvider. Il provider non viene caricato finché il servizio non è effettivamente necessario: le prestazioni dell’app migliorano.
provides() viene risolto.
Test del pacchetto
Per testare il pacchetto in isolamento usa Orchestra Testbench. Ti permette di scrivere i test come se fossi in un’app Laravel.getPackageProviders() per registrare il service provider del pacchetto.
Pubblicazione su Composer
Best practice per pubblicare il pacchetto su Packagist. Impostazioni base dicomposer.json
Pagine correlate
Service provider
Rivedi i metodi
register e boot dei service provider e i dettagli dei deferred provider.Gestione della compatibilità tra versioni
Strategie per adattarsi agli upgrade major di Laravel e PHP e configurazione della matrix di test in GitHub Actions.