Cos’è un pacchetto
In Laravel un pacchetto è un pacchetto Composer che aggiunge funzionalità all’applicazione. Esistono principalmente due tipi.- Pacchetti standalone — librerie PHP generiche che non dipendono da Laravel (es. Carbon, Pest)
- Pacchetti Laravel — pacchetti con funzionalità integrate a Laravel come route, controller, view, configurazioni
Per scrivere test dei pacchetti si usa Orchestra Testbench. Puoi scrivere i test come faresti in una normale applicazione Laravel.
Auto-discovery dei pacchetti
Quando un pacchetto viene installato, Laravel legge la sezioneextra.laravel di composer.json e registra automaticamente service provider e facade.
bootstrap/providers.php: il pacchetto viene caricato automaticamente.
Come è implementato l’auto-discovery e quando la cache viene ricostruita è spiegato in dettaglio in Struttura interna del package auto-discovery.
Disabilitare l’auto-discovery
Se l’utente vuole disabilitare l’auto-discovery per un pacchetto specifico, può configurarlo nelcomposer.json dell’applicazione.
Il ruolo dei service provider
Il service provider è il punto di ingresso del pacchetto. Qui centralizzi la registrazione di view, configurazioni, migrazioni, route e altre risorse in Laravel. Un service provider estendeIlluminate\Support\ServiceProvider e ha due metodi: register e boot.
Pubblicazione dei file di configurazione
publishes() — pubblicare file
Chiamandopublishes() nel metodo boot, permetti all’utente di copiare i file di configurazione nella propria applicazione con il comando vendor:publish.
mergeConfigFrom() — unire con i valori di default
UsandomergeConfigFrom() nel metodo register, i valori di default del pacchetto vengono usati anche quando l’utente non ha pubblicato il file di configurazione.
Separare i gruppi di pubblicazione tramite tag
Passando un tag come secondo argomento dipublishes(), l’utente può pubblicare solo le risorse di cui ha bisogno.
Registrazione delle route
Per caricare i file di route si usaloadRoutesFrom(). Quando la cache delle route dell’applicazione è attiva, viene saltato automaticamente.
Pubblicazione delle migrazioni
UsandopublishesMigrations() puoi pubblicare i file di migrazione. Al momento della pubblicazione Laravel aggiorna automaticamente il timestamp.
Pubblicazione delle view
loadViewsFrom() — registrare le view
ConloadViewsFrom() registri la directory delle view. Tramite il namespace passato come secondo argomento, referenzi le view nella forma package::view.
resources/views/vendor/courier dell’applicazione e, se non la trova, usa la directory delle view del pacchetto. Questo permette all’utente di personalizzare le view.
Pubblicare le view
Registrare componenti Blade
Se includi componenti nel pacchetto, registrali nel metodoboot.
Pubblicazione dei file di traduzione
ConloadTranslationsFrom() registri i file di traduzione. Le traduzioni si referenziano nella forma package::file.key.
loadJsonTranslationsFrom().
Registrazione dei comandi
I comandi Artisan del pacchetto si registrano con il metodocommands(). È comune registrarli solo in ambiente console.
Integrazione con il comando optimize
Se il pacchetto ha una propria cache, puoi integrarla conphp artisan optimize e php artisan optimize:clear tramite il metodo optimizes().
Aggiungere informazioni al comando about
Per aggiungere informazioni sul pacchetto all’output di php artisan about, usa AboutCommand::add().
Creazione di facade
Le facade ti permettono di chiamare i binding del service container come metodi statici.1
Crea la classe di servizio
2
Crea la classe facade
Estendi
Illuminate\Support\Facades\Facade e restituisci in getFacadeAccessor() la chiave del binding sul service container.3
Effettua il binding nel service provider
4
Registra in composer.json
@method, abiliti l’autocompletamento dell’IDE.
DeferrableProvider — implementare il caricamento differito
I provider che effettuano solo binding sul service container possono implementare il caricamento differito tramite l’interfacciaDeferrableProvider. Poiché il provider viene caricato solo quando il servizio è effettivamente richiesto, le performance dell’applicazione migliorano.
provides() viene risolto.
Test del pacchetto
Per testare il pacchetto in isolamento si usa Orchestra Testbench. Puoi scrivere i test del pacchetto come se ti trovassi all’interno di una normale applicazione Laravel.getPackageProviders() per registrare il service provider del pacchetto.
Pubblicazione su Composer
Best practice per pubblicare il pacchetto su Packagist. Configurazione di base dicomposer.json
Pagine correlate
Service provider
Approfondisci i metodi
register e boot dei service provider e i provider differiti.Gestione della compatibilità di versione
Strategie per gestire gli upgrade di versione maggiore di Laravel e PHP e configurazione della matrice di test con GitHub Actions.