Laravel フレームワークを使用したことがあるなら、サービス コンテナ と サービス プロバイダーについて聞いたことがないはずがありません。実際、これらは Lavavel フレームワークの中核であり、Larvel アプリケーションでサービスを開始するという困難なタスクを実行します。
この記事では、laravelのサービスプロバイダーとは何なのかを紹介します。
サービス プロバイダーについて学ぶ前に、サービス コンテナー について簡単に紹介します。サービス コンテナーはサービス プロバイダーで頻繁に使用されます。
つまり、Laravel サービス コンテナは、バインドされたコンポーネントを保存するために使用されるボックスであり、アプリケーションに必要なサービスも提供します。
Laravel ドキュメントでは次のように説明されています:
Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具 - Laravel 文档
このようにして、組み込みコンポーネントまたはサービスを注入する必要がある場合、タイプヒント関数を使用できます。コンストラクターまたはメソッド Inject で使用すると、使用時にサービス コンテナーから必要なインスタンスとその依存関係が自動的に解決されます。クールじゃないですか?この機能により、コンポーネントの手動管理から解放され、システムの結合が軽減されます。
理解を深めていただくために、簡単な例を見てみましょう。
<?php Class SomeClass { public function __construct(FooBar $foobarObject) { // use $foobarObject object } }
ご覧のとおり、SomeClass には FooBar インスタンスが必要です。言い換えれば、他のコンポーネントに依存する必要があります。 Laravel は、サービスコンテナから適切な依存関係の注入を見つけて実行することにより、自動注入を実装します。
Laravel がどのコンポーネントまたはサービスをサービスコンテナにバインドする必要があるかをどのように認識するかを知りたい場合、その答えはサービスプロバイダーを通じて得られます。サービス プロバイダーは、コンポーネントをサービス コンテナーにバインドする作業を完了します。サービスプロバイダ内ではこの作業をサービスコンテナバインディングと呼び、バインディング処理はサービスプロバイダ側で完了します。
サービスプロバイダはサービスバインディングを実装し、registerメソッドでバインディング処理が完了します。
同時に、これにより新たな疑問が生じます:Laravel はどのサービスプロバイダーがあるかをどのようにして知るのでしょうか?これについてはまだ話し合っていないようですね?到着すると、以前は Laravel が自動的にサービスを見つけてくれると言われていたことが分かりました。友人、質問が多すぎます。Laravel は単なるフレームワークであり、スーパーヒーローではありませんね。もちろん、どのサービスプロバイダーを持っているかをLaravelフレームワークに明示的に伝える必要があります。
config/app.php 構成ファイルを見てみましょう。 Laravelアプリケーションの起動時にロードされるサービスプロバイダー設定のリストが表示されます。
'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ],
サービス プロバイダーとは
サービス コンテナーがバインディングと依存関係の注入を提供するツールである場合、サービス プロバイダーはバインディングを実装するツールです。 まず、コンテンツ プロバイダー サービスを見て、その仕組みを理解しましょう。vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php ファイルを開きます。
public function register() { $this->app->singleton('cache', function ($app) { return new CacheManager($app); }); $this->app->singleton('cache.store', function ($app) { return $app['cache']->driver(); }); $this->app->singleton('memcached.connector', function () { return new MemcachedConnector; }); }
cache、
cache.store、
memcached.connector) が実行されます。
$this->app からアクセスできる対応表のみを提供します。
config/app.php 構成ファイルからサービス プロバイダー構成リストを読み取ることで、すべてのサービスがサービス コンテナーに登録されることを前に説明しました。
laravelフレームワーク紹介チュートリアルコラムをご覧ください。
以上がlaravelのサービスプロバイダーとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。