サービスプロバイダーとサービスコンテナはlaravelを使用してどのように機能しますか?
公開: 2022-09-16Laravel は、コア機能を理解するのが難しいため、経験豊富な開発者でさえ扱うのが非常に難しい場合があります。 しかし、確かに、Web 開発は興味深いものです。
機能の 1 つはサービス プロバイダーです。これについては、このブログで詳しく説明します。 このブログでは、laravel でサービス コンテナーがどのように機能するかについても説明します。
これらは想像していたよりも簡単です。 そうは言っても、すぐに始めましょう。
laravelのサービスプロバイダーとは?
Laravel アプリケーションのサービス プロバイダーは、アプリケーションがブートストラップされるコア ポイントとして機能します。 その結果、プロバイダーを使用して、laravel の基本サービスをサービス コンテナーに注入するだけでなく、アプリケーションのサービス、クラス、およびそれらの依存関係をサービス コンテナーに注入します。
この例のプロバイダーは、「providers」という名前の配列として config/app.php にある場合があります。 以下の画像を参照してください。
サード パーティのサービス プロバイダーを使用する場合は、サービス プロバイダー アレイの構成で適用する必要があります。
アプリケーションの認証に必要な Auth など、いくつかのサービス プロバイダーがすでにアプリケーション全体を実行していることがわかります。
laravelでサービスプロバイダを作成するには?
サービス プロバイダーを使用するには、最初にサービス プロバイダーを作成する必要があります。 その結果、今すぐサービス プロバイダーを設定します。 以下に示すコマンドを使用して、必要なサービス プロバイダーを作成できます。
php artisan make:provider MyServiceProvider
コマンドを実行すると、アプリケーションにサービス プロバイダーが作成され、それを使用できるようになります。
その後、アプリを開き、プロバイダー フォルダーに移動します。ここで、サービス プロバイダーが見つかります。
ここには、register() と boot() の 2 つのメソッドがあります。
register() メソッド
register() メソッドを使用すると、サービス コンテナーへのバインディングを定義できるという事実を知っておくことは非常に重要です。 たとえば、次のコードを参照してください。
$this->app は、アプリを介してシングルトン クラスにアクセスできる laravel のグローバル変数です。
シングルトンは特性です。 この特性を適用すると、アプリでパラメーターとして送信されるクラスが何であれ、アプリケーション全体で 1 つの重複 (インスタンス) のみを持つ必要があることをアプリケーションに通知します。 これは、MyClass が 1 回解決され、my_class 変数を使用してアクセスできるインスタンスが 1 つだけあることを意味します。
boot() メソッド
boot() メソッドを使用すると、register メソッドを使用して以前に登録されたすべてのサービスにアクセスできます。 したがって、この方法を利用して、サービス全体をアプリケーションに含めることができます。

サービスプロバイダーを登録するには?
サービス プロバイダーを構築したので、構成ファイルに登録してプロセスを完了する必要があります。 以下の画像に示す方法でここに登録する必要があります。
アプリケーションが実行されるたびに、すべてのサービス プロバイダーが最初に読み込まれます。 サービス プロバイダーは、Laravel アプリケーションの主要な中心的な場所であり、このブログで以前に説明したように、完全なアプリケーションの実行を支援するために常にそこにいます。
laravelのサービスコンテナとは?
Service Container は、単一のサーバーで Laravel アプリケーションを実行するために必要なすべてのバインディングを格納できる強力なメカニズムです。
アプリケーション内のすべてのものは、サービス コンテナーの助けを借りて結合できます。
laravelでサービスコンテナを使用するには?
次のシナリオを考えてみましょう。足し算、掛け算などの特定の基本演算を実行する、MathService という名前のクラスがあります。 このクラスのコードを以下に示します。
上記のように、配列 sum 関数を使用して数値配列の合計を計算する方法と、配列積関数を使用して配列として提供されたすべての数値を乗算する方法の 2 つがあります。
配列合計関数は、配列合計関数を使用して数値配列の合計を計算しますが、配列積関数は、配列として提供されるすべての数値を乗算します。
サービス プロバイダーを使用するには、まずサービスをサービス コンテナーにバインドする必要があります。
ただし、そうすることで、Laravel に MathService コンテナーを MathService という名前のコンテナーに保持し、クラスのインスタンスが必要なときはいつでもそれを返すように指示しています。 これはクラスの 1 回限りのバインドであり、プログラムから任意の数のインスタンスを取得するために使用できます。
前述のように、サービス コンテナーとプロバイダーは、すべての Laravel アプリケーションの重要なコンポーネントです。 前述のように、独自のサービス プロバイダーを設計するか、サードパーティのサービス プロバイダーをアプリケーションに組み込むことができます。
例として、Laravel で socialite を利用したい場合は、それをアプリ サービス プロバイダー ファイルにコピー アンド ペーストするだけで、アプリケーションの任意の場所で使用できます。
要約すると
アプリケーションを構成するとき、サービス プロバイダーが利用されます。 サービス コンテナー バインディングに加えて、ルート、ミドルウェア、イベント リスナーなどの他の主要な要素も、構成ファイルのこのセクションに登録されます。
サービス プロバイダーは、要求自体が処理される前に実行されるため、要求がシステムによって処理される前に、必要なものがすべて整ってセットアップされます。 一部のサービス プロバイダーは定期的に実行されますが、他のサービス プロバイダーは必要な場合にのみ実行されます (「遅延プロバイダー」)。
サービス コンテナーを利用する場合、依存関係の挿入 (たとえば、コントローラー クラスでのパラメーターの挿入) だけでなく、バインディング クラスと解決クラス (特定のコントラクトに対してどのクラスをインスタンス化するかなど) にも使用できます。
Web 開発は、困難なプロセスになる可能性があります。 そのため、webdew には熟練した Web 開発者のチームがあり、Web サイトやアプリケーションを作成し、物事をより簡単にするのに役立ちます。
Web デザインと Web 開発の手を必要としていますか? お問い合わせください!
編集者:アムルサ