2016-01-07 7 views
5

私はLaravel 5アプリケーションに取り組んでいます。アプリケーションのコードは複数のlaravel 5アプリケーションで再利用されるはずです。これはコンポーザーパッケージを作成しているので、何度でもこのパッケージをインストールしたいと思いますlaravel 5のアプリケーションに同じ機能を持たせてビルドすることができます。laravel 5サービスプロバイダをベンダーパッケージ自体からブートストラップする方法は?

私はコンポーザパッケージの開発に新しく、特にサービスプロバイダを使用してLaravel 5にパッケージをフックします。これまでのところ、私は以下の一つとして、サービスプロバイダを使用している場合、私は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'; 
    } 
} 

を、私はちょうど経由でパッケージが必要ですどのブランドの新しいLaravel 5のインストールに作曲し、私はちょうどこれにapp.phpで更新プロバイダの配列を必要とする:

Uppdragshuset\AO\Tenant\TenantServiceProvider::class 

これは私には理にかなっていると、あまりにも動作します。しかし、現在私が開発しているパッケージには独自の依存関係があり、多くの依存パッケージにはlaravel 5サービスプロバイダが含まれていますので、laravel5インストールにそれらをすべて手動で組み込む必要があります。

しかし私は、これらの依存サービスプロバイダをパッケージに登録する方法が必要であると推測しています。これは、何らかの形で私が上に挙げたプロバイダを登録するだけです。問題は私がこれを行う方法を知らず、どこでも同じような参照を見つけることができないことです。コンポーザパッケージ自体から複数のサービスプロバイダを登録するには?

答えて

6

私は最終的にどのようにコンポーザーパッケージ自体から依存サービスプロバイダを登録するかを考え出した。

私は主なアプリケーションへのルートにフックするはずのメインパッケージTenantServiceProviderを持っており、移行や設定などの発行も担当しています。

私はAppファサードにregister()方法を使用し、そのように私のメインTenantServiceProviderのregisterメソッドでそれを呼び出す同じプロバイダを経由して任意の依存サービスプロバイダを登録することができ判明:

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

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

このように、私はプロバイダーの配列にTenantServiceProviderを登録するだけで、laravelアプリケーションのapp.php設定ファイルに登録する必要があります。それが呼び出され、そのメソッドが呼び出されると、他のすべてのプロバイダはApp::register()呼び出しによって登録されます。これが誰かを助けることを望みます。

+0

これはやり方です。サービスプロバイダをサービスプロバイダに登録することができます。 –

+0

ありがとう、私はちょうど私のパッケージから '$ this-> app-> register()'を使ってlaravelサービスプロバイダをオーバーライドすることができました – myol

1

パッケージcomposer.jsonファイルを作成し、そのパッケージ自体の依存関係を追加することができます。作成者が作成者/パッケージを必要とする場合は、そのパッケージの依存関係を見て自動的に以下を要求しますその公開:私は、多くの場合、あなたは、PHP職人のベンダーを行う必要がありますあなたのサービスプロバイダを公開することの後に

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

を以下のブート方式を追加することができます

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

を引くパッケージのcomposer.json要件しないでくださいそれを取得

+0

私はそれを理解しています。私はすでにそれをやっています。私の問題は、これらのパッケージの一部のサービスプロバイダにあります。サービスプロバイダを登録する場所はどこですか? – Rohan

+0

私はちょうどあなたが既にそこにいることを見たコードをチェックしました [Laracastsサービスプロバイダの例](https://github.com/laracasts/PHP-Vars-To-Js-Transformer/blob/master)を見てください/src/JavaScriptServiceProvider.php)@Rohan –

関連する問題