Maison  >  Article  >  développement back-end  >  Explication graphique détaillée de l'architecture de base de Laravel 5.5

Explication graphique détaillée de l'architecture de base de Laravel 5.5

php中世界最好的语言
php中世界最好的语言original
2018-03-24 15:36:042894parcourir

Cette fois, je vais vous apporter une explication graphique et textuelle détaillée de l'architecture de base de Laravel 5.5. Quelles sont les précautions lors de l'utilisation de l'architecture de base de Laravel 5.5. Voici des cas pratiques, prenons un. regarder.

Avant-propos

Cet article vous présente principalement le contenu pertinent sur l'architecture de base de Laravel 5.5 et le partage pour votre référence et votre étude . Je ne dirai rien ci-dessous. Assez dit, jetons un œil à l’introduction détaillée.

1. La méthode Injection de dépendance

transmet le nom du composant et le framework l'instanciera automatiquement. peut utiliser directement

par exemple, l'objet de requête le plus couramment utilisé

2. Conteneur de service

En fait, le cœur de Laravel est un conteneur IoC. Le cœur de Laravel lui-même est très léger et n'a aucune fonction d'application magique ou substantielle. Divers modules fonctionnels utilisés par de nombreuses personnes, tels que Route (routage), Eloquent ORM (composant ORM de base de données), Request (requête), Response (réponse), etc., sont en fait fournis par des modules de classe qui n'ont rien à voir avec le noyau . Le processus depuis l'enregistrement jusqu'à l'instanciation de ces classes jusqu'à leur utilisation finale relève en fait de la responsabilité du conteneur de services de Laravel.

Le fournisseur de services est principalement divisé en deux parties, registre (enregistrement) et démarrage (démarrage, initialisation)

Fournisseur de services <.>

Pour qu'une classe soit extraite par un conteneur, elle doit d'abord être enregistrée auprès du conteneur. Puisque Laravel appelle ce conteneur un conteneur de services, si nous avons besoin d'un service, nous devons d'abord enregistrer et lier le service au conteneur. Ensuite, la chose qui fournit le service et lie le service au conteneur est le fournisseur de services.

4. Ajoutez votre propre classe au conteneur IOC

4.1 Créez une nouvelle classe de validation .

4.2. Créer un nouveau 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. Ajouter un fournisseur au conteneur IOC

4.5. 🎜>

4.6.

5. Façade

la façade est utilisée pour fournir une interface unifiée par exemple. , quel que soit le cache que vous utilisez, redis ou memcache, le client peut utiliser la méthode cache::get() pour obtenir la valeur. Quant à savoir si vous utilisez redis ou memcahe, cela dépend de celui que vous avez lié dans le fournisseur de services. . L'implémentation de cache::get() consiste à hériter de la méthode Facade getFacadeAccessor et à renvoyer la valeur clé que vous liez dans le conteneur, telle que le cache, puis la classe Facade utilisera la variable magique php

callstatic() , callstatic La logique analysera le service lié par le cache à partir du conteneur, auquel le fournisseur de services mentionné ci-dessus est lié

5.1, par exemple, mail dans config/app.php

5.2 Cette classe renvoie uniquement un mailer

5.3. Si vous l'appelez Si la méthode d'envoi n'existe pas, elle entrera dans la méthode 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接口自动化测试功能的实现

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn