ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 5.5のコアアーキテクチャの詳細な図による説明

Laravel 5.5のコアアーキテクチャの詳細な図による説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-24 15:36:042931ブラウズ

今回は、Laravel 5.5 のコア アーキテクチャを図とテキストで詳しく説明します。Laravel 5.5 のコア アーキテクチャを使用する際の 注意事項 は何ですか?実際の事例を見てみましょう。

はじめに

この記事は主にLaravel 5.5のコアアーキテクチャに関する関連コンテンツを紹介し、参考と学習のために共有します。以下では多くを述べませんが、詳細を見てみましょう。導入。

1. Dependency Injection

メソッドはコンポーネント名を渡すと、フレームワークがそれをメソッド内で直接使用できます

たとえば、最も一般的に使用されるリクエストオブジェクト

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.4、プロバイダーをIOCコンテナーに追加

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

magic メソッド

に入ります。

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中文网其它相关文章!

推荐阅读:

php自定义二维数组排序函数array

phpunit接口自动化测试功能的实现

以上がLaravel 5.5のコアアーキテクチャの詳細な図による説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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