今回は、Laravel 5.5 のコア アーキテクチャを図とテキストで詳しく説明します。Laravel 5.5 のコア アーキテクチャを使用する際の 注意事項 は何ですか?実際の事例を見てみましょう。
はじめに
この記事は主にLaravel 5.5のコアアーキテクチャに関する関連コンテンツを紹介し、参考と学習のために共有します。以下では多くを述べませんが、詳細を見てみましょう。導入。 メソッドはコンポーネント名を渡すと、フレームワークがそれをメソッド内で直接使用できますたとえば、最も一般的に使用されるリクエストオブジェクト。2. サービスコンテナ
実際、Laravel のコア自体は非常に軽量であり、魔法のような、または実質的なアプリケーション機能はありません。 Route(ルーティング)、Eloquent ORM(データベースORMコンポーネント)、Request(リクエスト)、Response(レスポンス)など、多くの人が利用するさまざまな機能モジュールは、実はコアとは関係のないクラスモジュールによって提供されています。これらのクラスの登録からインスタンス化、そして最終的に使用されるまでのプロセスは、実際には Laravel のサービス コンテナーの責任です。 サービスプロバイダーは主に register (登録) と boot (ブート、初期化) の 2 つの部分に分かれています3. サービスプロバイダー
コンテナーによってクラスが抽出されるには、最初に登録する必要があります。このコンテナに。 Laravel はこのコンテナをサービスコンテナと呼ぶため、サービスが必要な場合は、まずサービスを登録してコンテナにバインドする必要があります。次に、サービスを提供し、サービスをコンテナにバインドするのがサービスプロバイダです。4. 独自のクラスを IOC コンテナに追加します
4.1. 新しい validate クラスを作成します4.2. 新しい validateProvider を作成します。
4.3. バインドします。クラスをプロバイダーに検証
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class ValidateProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('valicate',function(){ return new Validate(); }); } }
4.5、使用
4.6、成功!
5. ファサード
ファサードは、たとえば、redis または memcache のどちらのキャッシュを使用しても、クライアントは cache::get() メソッドを使用できます。値を取得するために、redis を使用するか memcahe を使用するかは、どちらをサービス プロバイダーにバインドするかによって異なります。 cache::get() の実装は、Facade メソッド getFacadeAccessor を継承し、キャッシュなどのコンテナーにバインドしたキー値を返すことです。その後、Facade クラスは
php マジック変数callstatic() のロジックを使用します。 callstatic は、コンテナ内で解析されます。たとえば、config/app.php のメールは、キャッシュにバインドされています。クラスは 1 つのメーラーのみを返します
5.3。その send メソッドを呼び出すと、それが存在しない場合、callstatic に入ります。
5.4、这个方法会得到mailer的实例,即app('mailer')
5.5、这个实例便能调用mailer类的send方法
6、契约
Laravel 的契约是一组定义框架提供的核心服务的接口。例如,Illuminate\Contracts\Queue\Queue契约定义了队列任务所需的方法,而Illuminate\Contracts\Mail\Mailer契约定义了发送电子邮件所需的方法。框架对每个契约都提供了相应的实现。
好处是实现了程序的低耦合和简单性。
低耦合#
首先,让我们来看一些高耦合缓存实现的代码。如下:
<?php namespace App\Orders; class Repository { /** * 缓存实例。 */ protected $cache; /** * 创建一个仓库实例。 * * @param \SomePackage\Cache\Memcached $cache * @return void */ public function construct(\SomePackage\Cache\Memcached $cache) { $this->cache = $cache; } /** * 按照 Id 检索订单 * * @param int $id * @return Order */ public function find($id) { if ($this->cache->has($id)) { // } } }
这个类中,程序跟给定的缓存实现高耦合。因为我们依赖于一个扩展包的特定缓存类。一旦这个扩展包的 API 被更改了,我们的代码就必须跟着改变。
同样的,如果我们想要将底层的的缓存技术( Memcached )替换为另一种缓存技术( Redis ),那又得再次修改这个repository类。而repository类不应该了解太多关于谁提供了这些数据或是如何提供的等等。
比起上面的做法,我们可以使用一个简单的、与扩展包无关的接口来改进我们的代码:
<?php namespace App\Orders; use Illuminate\Contracts\Cache\Repository as Cache; class Repository { /** * 缓存实例。 */ protected $cache; /** * 创建一个仓库实例。 * * @param Cache $cache * @return void */ public function construct(Cache $cache) { $this->cache = $cache; } }
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がLaravel 5.5のコアアーキテクチャの詳細な図による説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。