Contrats de Laravel 5: une plongée profonde dans les améliorations architecturales et l'application pratique avec Twig
Laravel 5 a introduit une amélioration architecturale importante: le package des contrats. Cet article explore la justification de ce changement et démontre un cas d'utilisation pratique en remplaçant le moteur de modèles de lame de Laravel avec des brindilles de symfony, en tirant parti de la puissance des contrats.
Concepts clés:
Comprendre les contrats:
Un contrat, en substance, est une interface spécifiant un comportement. Cela s'aligne sur les principes de programmation orientés objet où les interfaces définissent les signatures de méthode sans détails d'implémentation. Le conteneur IOC de Laravel facilite les interfaces contraignantes (contrats) à leurs implémentations. Par exemple:
$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');
Le passage à un service différent (par exemple, fanout) nécessite uniquement de modifier la liaison:
$this->app->bind('App\Contracts\EventPusher', 'App\Services\FanoutEventPusher');
De nombreux services de base Laravel utilisent désormais des contrats, ce qui permet de remplacer facile. Par exemple, pour remplacer le service Illuminate/Mail
, implémentez le contrat IlluminateContractsMail
.
Remplacement de la lame par des brindilles en utilisant des contrats:
Le moteur de modèles par défaut de Laravel est la lame. Cet exemple montre le remplacement par une brindille symfony en utilisant des contrats.
1. Définition du package (Composer.json):
{ "name": "whyounes/laravel5-twig", "description": "Twig for Laravel 5", "authors": [ { "name": "RAFIE Younes", "email": "younes.rafie@gmail.com" } ], "require": { "twig/twig": "1.18.*" }, "autoload": { "psr-0": { "RAFIE\": "src/" } } }
2. Voir le fournisseur de services (twigViewServiceProvider.php):
Ce fournisseur enregistre le chargeur et l'environnement des brindilles dans le conteneur de service de Laravel.
// ... (Provider code as in original example) ...
3. Afficher l'usine (twigfactory.php):
Cette usine implémente IlluminateContractsViewFactory
et gère la création et le rendu de la création en utilisant Twig.
// ... (Factory code as in original example) ...
4. Afficher l'implémentation (twigview.php):
Cette classe implémente IlluminateContractsViewView
et agit comme un conteneur pour la vue brindille, interagissant avec le TwigFactory
.
// ... (View code as in original example) ...
5. Enregistrement du fournisseur de services (config / app.php):
Enregistrez le TwigViewServiceProvider
et commentez le fournisseur de vue Laravel par défaut:
$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');
6. Utilisation de brindilles dans les routes (app / http / routes.php):
Maintenant, vous pouvez utiliser des modèles de brindilles:
$this->app->bind('App\Contracts\EventPusher', 'App\Services\FanoutEventPusher');
7. Modèle de brindille (ressources / vues / home.twig):
un modèle de brindille simple:
{ "name": "whyounes/laravel5-twig", "description": "Twig for Laravel 5", "authors": [ { "name": "RAFIE Younes", "email": "younes.rafie@gmail.com" } ], "require": { "twig/twig": "1.18.*" }, "autoload": { "psr-0": { "RAFIE\": "src/" } } }
Conclusion:
Les contrats de Laravel 5 offrent un mécanisme puissant pour étendre et personnaliser le cadre. Le remplacement de la lame par des brindilles met en évidence les avantages de ce modèle architectural, conduisant à des applications plus propres, plus testables et flexibles. L'API cohérente fournie par les contrats simplifie le processus et garantit la maintenabilité. Le projet complet se trouve sur [Lien vers le projet].
Questions fréquemment posées (FAQ):
(La section FAQ de l'entrée d'origine est déjà bien écrite et complète. Aucune modification n'est nécessaire ici.)
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!