ホームページ >バックエンド開発 >PHPチュートリアル >Laravel のサービスプロバイダーとファサードパターンの簡単な紹介

Laravel のサービスプロバイダーとファサードパターンの簡単な紹介

不言
不言オリジナル
2018-06-22 11:33:171636ブラウズ

この記事では、Laravel でのサービス プロバイダーとファサード パターンの使用に関する関連情報を主に紹介します。詳細なサンプル コードを通じて、学習や学習に役立ちます。この作品には一定の参考と学習価値があり、それを必要とする友人が一緒に学ぶことができます。

まえがき

laravelでは、追加したクラスを使用する必要がある場合、クラスファイルを保存するための専用フォルダーを作成できます。 Laravel のサービスプロバイダーを使用することもできます。

実際には、この 2 つに大きな違いはありません。前者を使用する場合、コントローラーが多くのカスタム クラス ファイルを参照する場合、それがビジネス コードに依存するためです。どれだけの依存関係が生成されるのかを想像してください。この場合、サービスプロバイダーのメソッドを使用して、laravel コンテナーにクラスを登録できます。これにより、依存関係を別の構成ファイルで管理できるようになり、ロジックとその後のメンテナンスが大幅に楽になります。便利。

ファサードを使用する主な理由は、クラスをインスタンス化する必要がないため、静的メソッドを使用してクラス メソッドにアクセスできるためです。ただし、これには実際にはアクセスできないなどの欠点があります。対応するメソッド内に直接ジャンプします。このメソッドの使用方法を直感的に理解することはできません。個人で開発する場合はあまり影響がないかもしれませんが、チームで開発する場合は少しめまいがするかもしれません。

Laravel に付属のファイル システムを例にとると、サービス プロバイダーは config/app.php の構成ファイルのプロバイダー配列に登録されます:

Illuminate\Filesystem\FilesystemServiceProvider::class,

ファサードはエイリアス配列で定義されます:

‘File' => Illuminate\Support\Facades\File::class,

これらの 2 つの手順により、Laravel を非常に便利に使用できるようになります ファイル システム関連の操作呼び出し形式は非常に単純です。

  • File::exist($path) ファイルが存在するかどうかを確認します。

  • File::get($path, $lock = false)、ファイルの内容を取得します。

  • File::append($path, $data)、コンテンツをファイルの末尾に追加します。

  • File::files($directory)、ディレクトリ内のすべてのファイルを取得します。

それでは、これはどのように行われるのでしょうか? Laravelのサービスプロバイダーとファサードモードについてそれぞれ話しましょう。

サービスプロバイダー

最初に定義を見てみましょう:

サービスプロバイダーは、すべての Laravel が集中する中心です。アプリケーションが開始されます。独自のアプリケーションを含むすべてのコア Laravel サービスは、サービスプロバイダーを通じて開始されます。

/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php にあるファイル システム サービス プロバイダーでは、 register メソッドでシングルトンがバインドされていることを確認できます。

protected function registerNativeFilesystem()
{
 $this->app->singleton('files', function () {
  return new Filesystem;
 });
}

このシングルトンは、Filesystem クラスのシングルトン モードです。もちろん、このサービス プロバイダーは他のシングルトンをバインドしたり、さらに多くのことを実行したりすることもできます。ここでは File::exist() の原理のみを学習します。

つまり、ファイルのインスタンスは 1 つですが、これは実際には Filesystem クラスのインスタンスです。

現時点で、Facade がない場合は、ファイルシステム インスタンスのメソッドを呼び出すこともできます。つまり、次のように呼び出すことができます:

app(‘files')->exist($path)

さて、ファサードについて話しましょう。

ファサード ファサード モード

最初に概要を見てみましょう:

Facades /fəˈsäd/ はアプリケーションです。アプリケーションのサービス コンテナで利用可能なクラスは、「静的」インターフェイスを提供します。 Laravel には、ほぼすべてのサービスにアクセスするために使用できる多くのファサードが付属しています。 Laravel ファサードは、サービス コンテナ内の基本クラスの「静的プロキシ」です。従来の静的メソッド呼び出しと比較して、ファサードはよりシンプルで豊富な構文を提供すると同時に、より優れたテスト容易性とスケーラビリティを備えています。

この記事の冒頭で、エイリアス配列がファイルを定義すると述べました。特定のクラスは

Illuminate\Support\Facades\File::class,

その内容は次のとおりです。

class File extends Facade
{
 /**
  * Get the registered name of the component.
  *
  * @return string
  */
 protected static function getFacadeAccessor()
 {
  return 'files';
 }
}

#実際には名前が返されます。名前ファイルはバインドされたばかりのシングルトン モードの名前であることに注意してください。それは正しい。

このようにして、File エイリアスまたはファサードを使用して、この Filesystem インスタンスのメソッドを呼び出すことができます。

この記事を通じて、サービスプロバイダーとFacade、そして実際に呼び出されるクラスのインスタンスの関係を理解し​​ていただければ幸いです。

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

Laravel フレームワークの PHP オブザーバー パターン

以上がLaravel のサービスプロバイダーとファサードパターンの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。