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.
callAfterResolving() e come progettare il codice per tollerare applicazioni ripetute.
Per i metodi di registrazione che non trascinano stato nemmeno con Octane o con i queue worker, consulta Progettare il ciclo di vita dei servizi di un pacchetto. La pagina spiega l’implementazione interna di scoped() e le avvertenze sulle dipendenze conservate dai singleton.
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 registrare i file di migrazione per la pubblicazione. Nella configurazione standard di Laravel 13, database.migrations.update_date_on_publish è attivo, quindi il timestamp nel nome del file viene aggiornato al momento della pubblicazione. Se l’impostazione è disattivata o assente, questo aggiornamento non avviene.
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.
L’ordine di ricerca effettivo e il fallback file per file, come far arrivare le modifiche ai template già pubblicati e la differenza rispetto alla cache di Blade sono spiegati in Sovrascrivere e aggiornare le view di un pacchetto.
Pubblicare le view
Registrare componenti Blade
Se includi componenti nel pacchetto, registrali nel metodoboot.
Distribuzione degli asset pubblici
Per distribuire JavaScript, CSS e immagini del pacchetto, registra conpublishes() la copia verso una destinazione come public_path('vendor/courier'). Anche se aggiorni il pacchetto, i file già pubblicati non cambiano automaticamente.
La selezione dei file tramite tag e provider, la differenza tra --force e --existing, la gestione dei file eliminati e l’aggiornamento tramite laravel-assets sono spiegati in Asset pubblici e aggiornamento di un pacchetto.
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().
--except, ordine di esecuzione rispetto ai task standard e codici di uscita in caso di errore sono spiegati in Cache dei pacchetti e integrazione con optimize.
Aggiungere informazioni al comando about
Per aggiungere informazioni sul pacchetto all’output di php artisan about, usa AboutCommand::add().
--only e l’output JSON, un design che non espone segreti e lo stato di registrazione nei test sono spiegati in Aggiungere informazioni diagnostiche del pacchetto ad about.
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.