私はLaravel5アプリケーションに取り組んでいますが、アプリケーションのコードは複数のlaravel 5アプリケーションで再利用されることになっています。そのため、composerパッケージを作成し、このパッケージを任意の数のlaravelにインストールしたいと思います。同じ機能を持ち、それを基に構築する5つのアプリケーション。
私はコンポーザーパッケージの開発、特にサービスプロバイダーを使用してパッケージをLaravel5にフックするのは初めてです。これまでのところ、以下のようなサービスプロバイダーを使用すると、laravel5アプリケーションでルートを使用できるようになることを学びました。
<?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';
}
}
これを機能させるには、composerを介して新しいLaravel 5インストールにパッケージを追加する必要があります。次に、プロバイダーの配列を次のように更新する必要がありますapp.php
。
Uppdragshuset\AO\Tenant\TenantServiceProvider::class
これは私には理にかなっており、機能します。しかし今、私が開発しているパッケージにも独自の依存関係があり、それらの依存関係パッケージの多くにはlaravel 5サービスプロバイダーも含まれているため、それらを機能させるには、laravel5インストールにすべてを手動で含める必要があります。
しかし、私が自分で作成しているパッケージにこれらの依存サービスプロバイダーを登録する方法があるはずなので、上記の1つのプロバイダーを登録するだけで済みます。問題は、これを行う方法がわからず、どこにも同様の参照が見つからないことです。コンポーザーパッケージ自体から複数のサービスプロバイダーを登録するにはどうすればよいですか?
そこで、コンポーザーパッケージ自体から依存サービスプロバイダーを登録する方法をついに理解しました。
私は、メインの持っているTenantServiceProvider
主なアプリケーションにルートにフックすることになってもその上の移行、コンフィグとを公開する責任がされて私のパッケージの中に。
ファサードのregister()
メソッドを使用して、同じプロバイダーを介して依存するサービスプロバイダーをApp
登録し、次のTenantServiceProvider
ようにメインのregisterメソッドで呼び出すことができることがわかりました。
public function register()
{
include __DIR__.'/routes.php';
App::register(RepositoryServiceProvider::class);
App::register(\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class);
}
このようにしてTenantServiceProvider
、laravelアプリケーションのapp.php構成ファイルのプロバイダーの配列にを登録するだけで済みます。それが呼び出され、その上のregisterメソッドが呼び出されると、他のすべてのプロバイダーがApp::register()
呼び出しを介して登録されます。これが誰かを助けることを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加