検索

ホームページ  >  に質問  >  本文

Laravel はいつ私が書いた内容をサービスプロバイダーに反映しますか?

たとえば、APP ディレクトリに新しいディレクトリ Services を作成し、その中に電子メール送信用のサービス EmailService.php を配置しました。他のコントローラーでそれを呼び出したい場合は、次のように直接引用できます。 リーリー

これで普通に使えるようになります。

そこで問題は次のとおりです: 1. 上記のように正常に使用できる場合、どのような状況でこの サービスサービス プロバイダー に配置する必要がありますか?
2. サービスプロバイダサービスコンテナの関係は、サービスコンテナに配置されていますか? >内部またはサービスプロバイダ? サービス プロバイダサービス コンテナ のそれぞれの責任は何ですか? 服务放到服务提供者里面去?
2、服务提供者服务容器之间的关系一直搞不太清楚,究竟服务是放到服务容器里面还是服务提供者里面?服务提供者服务容器

黄舟黄舟2807日前392

全員に返信(3)返信します

  • 習慣沉默

    習慣沉默2017-05-16 16:49:48

    服务提供者服务放进服务容器

    依存関係注入コンテナーのもう 1 つの紹介: 配線をやめて Laravel のコンテナーを愛する方法を学びましょう

    返事
    0
  • PHP中文网

    PHP中文网2017-05-16 16:49:48

    質問者は依存関係注入とlaravelのサービスコンテナについてまだよく知らないと思います。 (もちろんよく分かりません。以下は私の簡単な理解です)

    コントローラー内の特定の名前空間にあるクラスを直接指定した場合 (このクラスはインターフェイス (コントラクト) の実装である必要があります)、このクラスはコントローラーに結合されます。この実装クラスを変更する場合は、コントローラーとコントローラー内で呼び出されるメソッドを変更する必要があります。

    サービスプロバイダーに記述する場合、まず、分離できます (コントローラーメソッドのパラメーターは、タイプヒントを通じてサービス実装クラスに注入されます)。次に、サービスが他のサービスにも依存している場合、laravel のサービスコンテナーはこれらの依存関係を自動的に処理します。コントローラーの前で一連の use 構文を使用する代わりに、これらの依存ライブラリを自分でインポートします。 3 つ目は、インターフェースを通じてサービスが提供すべきメソッドのみを提供するように制約することです (単一責任)。

    基本的な理解はしていますが、間違いがあればコメント欄でご指摘ください。

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 16:49:48

    サービス コンテナーとサービス プロバイダーは 2 つの異なるものであり、必須の関係はありません。そのため、以下で別々に説明します。

    サービスコンテナ:
    はグローバル連想配列変数であり、その中に物事を格納し、オブジェクトはどこからでも名前によって取得できます。

    サービスプロバイダー:
    各サービスプロバイダーには、

    などのプログラム全体で使用される初期化コードがあります。

    アプリケーションの初期化時にルート定義をロードします
    特定のタイプのオブザーバーを登録します
    データベースに接続し、DBインスタンスをサービスコンテナに保存します

    上記の例から、これらの初期化コードを常に記述する必要があることがわかります。 Laravel がそれを仕様として定義し、初期化コードを分類して保存することを強制しているだけです。 (さまざまな種類の初期化コードをすべて app/Providers/AppServiceProvider.php に含めることもできます)

    訂正してください。

    返事
    0
  • キャンセル返事