2016-01-07 19 views
5

Sto lavorando su un'applicazione Laravel 5 e ora il codice dell'applicazione dovrebbe essere riutilizzato in più applicazioni di laravel 5 ed è per questo che sto creando un pacchetto di composer e quindi vorrei installare questo pacchetto in qualsiasi numero di laravel 5 applicazioni per avere la stessa funzionalità e creare anche su di essa.Come eseguire il bootstrap dei provider di servizi laravel 5 dal pacchetto del fornitore stesso?

Sono nuovo nello sviluppo del pacchetto di compositore e in particolare nei pacchetti di aggancio in Laravel 5 utilizzando i provider di servizi. Finora ho imparato che se io uso un fornitore di servizi come quella qui sotto, sarò in grado di utilizzare i percorsi nell'applicazione laravel 5:

<?php 

namespace Uppdragshuset\AO\Tenant; 

use Illuminate\Support\ServiceProvider; 

class TenantServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     include __DIR__.'/routes.php'; 
    } 
} 

Ora per fare questo lavoro, ho appena necessario il pacchetto tramite compositore a qualsiasi nuovo laravel 5 installazione e quindi ho solo bisogno di aggiornamento matrice del provider in app.php con questo:

Uppdragshuset\AO\Tenant\TenantServiceProvider::class 

questo ha senso per me e funziona anche. Ma ora il pacchetto che sto sviluppando ha anche dipendenze proprie e molti di questi pacchetti di dipendenze includono anche i service provider di laravel 5, quindi devo includerli tutti manualmente nelle installazioni di laravel5 per farli funzionare.

Ma suppongo che ci sia un modo per registrare questi fornitori di servizi dipendenti nel pacchetto che sto creando in qualche modo in modo tale che ho solo bisogno di registrare il fornitore che ho menzionato sopra. Il problema è che non so come farlo e non riesco a trovare un riferimento simile da nessuna parte. Come registrare più fornitori di servizi dal pacchetto del compositore stesso?

risposta

6

Così ho finalmente capito come registrare i fornitori di servizi dipendenti dal pacchetto del compositore stesso.

Ho il principale TenantServiceProvider nel mio pacchetto che si suppone agganci nelle rotte nell'applicazione principale ed è anche responsabile della pubblicazione di migrazioni, configurazioni e così via.

Risulta posso registrare eventuali fornitori di servizi dipendenti tramite lo stesso provider utilizzando il metodo register() sulla facciata App e chiamarlo nel metodo registro di mio principale TenantServiceProvider in questo modo:

public function register() 
{ 
    include __DIR__.'/routes.php'; 

    App::register(RepositoryServiceProvider::class); 
    App::register(\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class); 
} 

In questo modo ho è sufficiente registrare lo TenantServiceProvider nell'array del provider nel file di configurazione app.php dell'applicazione laravel. Quando viene chiamato e viene chiamato il metodo di registrazione, tutti gli altri provider verranno registrati tramite le chiamate App::register(). Spero che questo aiuti qualcuno.

+0

Sì, questa è la strada da percorrere: puoi registrare i fornitori di servizi all'interno dei fornitori di servizi. –

+0

Grazie, sono appena riuscito a scavalcare un fornitore di servizi laravel usando '$ this-> app-> register()' dal mio pacchetto – myol

1

è possibile creare un file composer.json del pacchetto e aggiungere le dipendenze in esso per il pacchetto stesso in modo che quando si compongono richiede autore/pacchetto si guarderà alle dipendenze di tale pacchetto e richiede automaticamente di seguito è un esempio di un requisito composer.json per un pacchetto spesso mi tiro

"require": { 
    "php": ">=5.5.0", 
    "illuminate/console": "~5.0", 
    "illuminate/support": "~5.0", 
    "illuminate/cache": "~5.0" 

è possibile aggiungere il seguente metodo di avvio di pubblicare il tuo fornitore di servizi

public function boot() 
{ 
    $this->publishes([ 
     __DIR__ . '/config/configifyouhaveone.php' => config_path('pathtotheconfig.php') 
    ]); 
    AliasLoader::getInstance()->alias(
     'serviceprovidername', 
     'Namespace\Subfolder\PackageName\PackageFacade' 
    ); 
} 

dopo che avrete bisogno di fare php vendor artigianale: pubblicare in modo non per get that

+0

lo capisco. Lo sto già facendo. Il mio problema si trova con i fornitori di servizi di alcuni di questi pacchetti. Dove registrare i fornitori di servizi? – Rohan

+0

ho appena controllato il codice ho visto che ci sei già dai uno sguardo al seguente link [Esempio di provider di servizi Laracasts] (https://github.com/laracasts/PHP-Vars-To-Js-Transformer/blob/master /src/JavaScriptServiceProvider.php) @Rohan –

Problemi correlati