たとえば、APP ディレクトリに新しいディレクトリ Services を作成し、その中に電子メール送信用のサービス EmailService.php を配置しました。他のコントローラーでそれを呼び出したい場合は、次のように直接引用できます。 リーリー
これで普通に使えるようになります。
そこで問題は次のとおりです: 1. 上記のように正常に使用できる場合、どのような状況でこの サービス
を サービス プロバイダー
に配置する必要がありますか?
2. サービスプロバイダ
とサービスコンテナ
の関係は、サービスコンテナ
に配置されていますか? >内部またはサービスプロバイダ
? サービス プロバイダ
と サービス コンテナ
のそれぞれの責任は何ですか? 服务
放到服务提供者
里面去?
2、服务提供者
、服务容器
之间的关系一直搞不太清楚,究竟服务
是放到服务容器
里面还是服务提供者
里面?服务提供者
和服务容器
習慣沉默2017-05-16 16:49:48
で服务提供者
把服务
放进服务容器
。
依存関係注入コンテナーのもう 1 つの紹介: 配線をやめて Laravel のコンテナーを愛する方法を学びましょう
PHP中文网2017-05-16 16:49:48
質問者は依存関係注入とlaravelのサービスコンテナについてまだよく知らないと思います。 (もちろんよく分かりません。以下は私の簡単な理解です)
コントローラー内の特定の名前空間にあるクラスを直接指定した場合 (このクラスはインターフェイス (コントラクト) の実装である必要があります)、このクラスはコントローラーに結合されます。この実装クラスを変更する場合は、コントローラーとコントローラー内で呼び出されるメソッドを変更する必要があります。
サービスプロバイダーに記述する場合、まず、分離できます (コントローラーメソッドのパラメーターは、タイプヒントを通じてサービス実装クラスに注入されます)。次に、サービスが他のサービスにも依存している場合、laravel のサービスコンテナーはこれらの依存関係を自動的に処理します。コントローラーの前で一連の use 構文を使用する代わりに、これらの依存ライブラリを自分でインポートします。 3 つ目は、インターフェースを通じてサービスが提供すべきメソッドのみを提供するように制約することです (単一責任)。
基本的な理解はしていますが、間違いがあればコメント欄でご指摘ください。
我想大声告诉你2017-05-16 16:49:48
サービス コンテナーとサービス プロバイダーは 2 つの異なるものであり、必須の関係はありません。そのため、以下で別々に説明します。
サービスコンテナ:
はグローバル連想配列変数であり、その中に物事を格納し、オブジェクトはどこからでも名前によって取得できます。
サービスプロバイダー:
各サービスプロバイダーには、
アプリケーションの初期化時にルート定義をロードします
特定のタイプのオブザーバーを登録します
データベースに接続し、DBインスタンスをサービスコンテナに保存します
上記の例から、これらの初期化コードを常に記述する必要があることがわかります。 Laravel がそれを仕様として定義し、初期化コードを分類して保存することを強制しているだけです。 (さまざまな種類の初期化コードをすべて app/Providers/AppServiceProvider.php
に含めることもできます)
訂正してください。