laravelの基本チュートリアル - サービスプロバイダー

WBOY
リリース: 2016-06-20 12:28:50
オリジナル
1015 人が閲覧しました

はじめに

サービスプロバイダーはlaravelアプリケーションの起動の中心です。独自のアプリケーションと Laravel のコア サービスは、サービス プロバイダーを通じて起動されます。

しかし、活性化とは何を意味するのでしょうか?通常、これは、登録されたサービス、イベント リスナー、ミドルウェア、ルーティングのバインドを含む登録を意味します。サービス プロバイダーはアプリケーション構成の中心です。

config/app.php ファイルを開くと、プロバイダー配列が見つかります。これらは、アプリケーションがロードするサービス プロバイダー クラスです。もちろん、多くは遅延読み込みプロバイダーです。つまり、すべてのリクエストがこれらのプロバイダーをロードするわけではなく、必要な場合にのみロードされます。

この記事では、独自のサービス プロバイダーを作成し、それをアプリケーションに登録する方法を学びます。

サービス プロバイダーの作成

すべてのサービス プロバイダーは IlluminateSupportServiceProvider クラスを継承します。この抽象クラスでは、プロバイダーが少なくとも 1 つの register メソッドを定義する必要があります。 register メソッドでは、サービス コンテナにコンテンツのみをバインドする必要があります。イベント リスナー、ルーティング、その他の関数を登録しようとしないでください。

Artisan CLI は、make:provider コマンドを使用して新しいプロバイダーを簡単に生成できます。

php artisan make:provider RiakServiceProvider
ログイン後にコピー

登録メソッド

前述したように、登録メソッドでは、実行することは 1 つあり、それはトランザクションをサービス コンテナにバインドすることです。他には何もしないでください。そうでない場合は、ご利用のプロバイダーが提供するサービスが登録されていない可能性があります。ここで、最も基本的なサービス プロバイダーを見てみましょう。

<?phpnamespace App\Providers;use Riak\Connection;use Illuminate\Support\ServiceProvider;class RiakServiceProvider extends ServiceProvider{  /**   * Register bindings in the container.   *   * @return void   */   public function register()   {     $this->app->singleton(Connection::class, function ($app) {         return new Connection(config('riak'));     });   }}
ログイン後にコピー

このサービス プロバイダーは register メソッドのみを定義し、このメソッドを使用してサービス コンテナー内の RiakConnection の実装を定義します。サービス コンテナの仕組みがわからない場合は、サービス コンテナのドキュメントを参照してください。

Start メソッド

サービスプロバイダーにビューコンポーザーを登録したい場合は、boot メソッドでこれを行う必要があります。すべてのサービス プロバイダーが登録されるまで、ブート メソッドは実行されません。これは、すべてのサービスにアクセスできることを意味します。

<?phpnamespace App\Providers;use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;class EventServiceProvider extends ServiceProvider{  // Other Service Provider Properties...  /**   * Register any other events for your application.   *   * @param \Illuminate\Contracts\Events\Dispatcher $events   * @return void   */   public function boot(DispatcherContract $events)   {     parent::boot($events);     view()->composer('view', function () {       //     });   }}
ログイン後にコピー

スタートアップ メソッドの依存関係の挿入

タイプ ヒントを使用して、サービス プロバイダーのブート メソッドの依存関係を識別できます。サービス コンテナは、必要な依存関係を自動的に挿入します。

use Illuminate\Contracts\Routing\ResponseFactory;public function boot(ResponseFactory $factory){  $factory->macro('caps', function ($value)){    //  };}
ログイン後にコピー

登録されたプロバイダー

すべてのサービス プロバイダーは、config/app.php 構成ファイルに登録されます。このファイルには、すべてのサービス プロバイダーの名前をリストするプロバイダー配列が含まれています。デフォルトでは、Laravel のコア サービスはこの配列に登録されます。これらのプロバイダーは、メール、キュー、キャッシュなどの Laravel のコアコンポーネントを有効にします。

この配列に登録済みプロバイダーを追加できます:

'providers' => [  // Other Service Providers  App\Providers\AppServiceProvider::class,],
ログイン後にコピー

遅延読み込みプロバイダー

プロバイダーがサービス コンテナーにバインディングを登録するだけの場合 特定の情報をお持ちの場合は、これらのサービスが実際に必要な場合にのみ登録されるように、登録を延期することを選択できます。登録を遅らせると、アプリケーションのパフォーマンスが向上する可能性があります。すべてのリクエストでファイル システムを通じてロードされるわけではないためです。

プロバイダーの読み込みを遅延するには、プロバイダー クラスで defer 属性を true に設定し、provides メソッドを定義します。 Provides メソッドは、プロバイダーによって登録されたサービス コンテナのバインディングを返します。

<?phpnamespace App\Providers;use Riak\Connection;use Illuminate\Support\ServiceProvider;class RiakServiceProvider extends ServiceProvider{  /**   * Indicates if loading of the provider is deferred.   *   * @var bool   */   protected $defer = true;   /**    * Register the service provider.    *    * @return void    */    public function register()    {      $this->app-singleton(Connection::class, function ($app) {        return new Connection($app['config']['riak']);      });    }    /**     * Get the services provided by the provider.     *     * @return array     */     public function provides()     {        return [Connection::class];     }}
ログイン後にコピー

Laravel は、すべての遅延読み込みサービス プロバイダーのサービス リストとサービス プロバイダーのクラス名をコンパイルして保存します。その後、laravel はサービスの 1 つを解決しようとしたときにのみサービスプロバイダーをロードします。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!