Maison > Article > développement back-end > Explication détaillée de l'architecture de base de Laravel 5.5
Cet article vous présente principalement une compréhension approfondie de l'architecture de base de Laravel 5.5. L'article la présente en détail à travers des images, des textes et des exemples de codes. Les amis dans le besoin peuvent s'y référer. éditeur.
1. La méthode d'injection de dépendances
passe dans le nom du composant, et le framework sera automatiquement instancié
peut être utilisé directement dans la méthode. , l'objet de requête le plus couramment utilisé
2. Conteneur de service
En fait, le cœur de Laravel est un conteneur IoC. très léger, et il n’y a rien de magique ou de substantiel dans ses fonctions d’application. 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)
3. Fournisseur de services
Une classe doit appartenir au. conteneur Pour pouvoir extraire, vous devez d'abord vous inscrire sur ce 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.
4.3. Liez la classe de validation au fournisseur
<?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 , utilisez 4.6, succès ! 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 vous. Vous pouvez utiliser la méthode cache::get() pour obtenir la valeur. L'utilisation de redis ou de memcahe dépend de celle que vous avez liée 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. Ensuite, la classe Facade utilisera la variable magique PHP __callstatic(). provenir du conteneur. Analysez le service lié au cache, auquel le fournisseur de services mentionné précédemment est lié 5.1, par exemple, envoyez un courrier dans config/app.php 5.2. Cette classe ne renvoie qu'un seul mailer 5.3. Si sa méthode d'envoi est appelée, si elle n'existe pas, elle entrera dans le callstatic. méthode magique 5.4. Cette méthode obtiendra l'instance de mailer, c'est-à-dire app('mailer') 5.5. Cette instance peut appeler la méthode d'envoi de la classe mailer 6. Contrat Le contrat de Laravel. est un ensemble d'interfaces qui définissent les services de base fournis par le framework . Par exemple, le contrat IlluminateContractsQueueQueue définit les méthodes requises pour la mise en file d'attente des tâches, tandis que le contrat IlluminateContractsMailMailer définit les méthodes requises pour l'envoi d'e-mails. Le cadre fournit des implémentations correspondantes pour chaque contrat. L'avantage est qu'il permet d'obtenir un faible couplage et une simplicité du programme. Couplage faible#Tout d'abord, examinons du code pour l'implémentation du cache à couplage élevé. Comme suit :<?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)) { // } } }Dans cette classe, le programme est fortement couplé au cache donné. Parce que nous nous appuyons sur une classe de mise en cache spécifique provenant d’un package d’extension. Une fois l'API de cette extension modifiée, notre code doit changer en conséquence. De même, si nous voulons remplacer la technologie de mise en cache sous-jacente (Memcached) par une autre technologie de mise en cache (Redis), nous devons à nouveau modifier la classe du référentiel. La classe du référentiel ne doit pas en savoir trop sur qui a fourni les données ou comment elles ont été fournies, etc. Par rapport à l'approche ci-dessus, nous pouvons utiliser une interface simple, indépendante du package d'extension, pour améliorer notre code :
<?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; } }
现在,更改之后的代码没有与任何扩展包甚至是 Laravel 耦合。而契约扩展包不包含任何实现和依赖项,你可以轻松地写任何给定契约的替代实现,来实现不修改任何关于缓存消耗的代码就可以替换缓存实现。
相关推荐:
Laravel 5.5中为响应请求提供的可响应接口详解_php实例
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!