~ read.
Création d'une extension DI (Dependency Injection Extensions) [FR]

Création d'une extension DI (Dependency Injection Extensions) [FR]

Retour expérience création d'une extension, pour les architectures des projets qui ne respectent pas les structuration de dossier suffixés avec bundle, deux solutions à vous proposez pour enregistrer/ injecter dans la configuration de conteneur container buider au niveau du kernel Symfony.

Extensions wth symfony : Extension DI (dependencyInjection), FormExtension, TwigExtension, DoctrineExtension, FormExtension ...
Autrement dit c’est l’injection d’une extension dans le conteneur des dépendances de symfony.

Pourquoi Les Extension Symfony ?

Symfony à la base de ces composant implémentés par défaut, comporte des Extensions comme le composant de FormExtenion, celui du TwigExtension, MonologExtension etc ,,qui héritent bien évidament de la classe Extension,

Afin de charger une configuration du service, il faut sûrement créer une Extesion DI.
Par exemple, je me suis trouvé devant une situation dans laquelle je dois typer (type hint) avec l'une des deux classes abstraites soit GainMemberAbstrait soit BarestoMemberAbstrait, et là, le choix de classe souhaitée dépend d'une paramétre pré configuré au niveau de parameters.yml , ainsi, la création d'une extension pour configurer le conteneur syfmony pour puisse charger la classe souhaitée selon la valeur du paramètre.

Pourquoi les extension ne sont pas injecté d’une façon automatique ?

Parce que pour aboutir à injecter une Extension il fallait suivre l’ensemble des conventions de nommage, déjà si on se focalise sur la classe abstraite Symfony/Component/HttpKernel/Bundle/Bundle qui contient le bout de code sous dessous responsable à l’injection des Extensions à travers la methode getContainerExtension() Lorsque Symfony démarre, il appelle cette méthode sur chaque bundle à la recherche de quelque chose appelé Extension. Cela appelle getContainerExtensionClass () et vérifie si cette classe existe.

Pour trouver cette classe "extension", elle recherche un répertoire `DependencyInjection` et une classe portant le même nom que le bundle, sauf pour remplacer Bundle avec Extension. Par exemple, pour AppBundle, il recherche une classe DependencyInjection \ AppExtension. Sauf que cette histoire n'est pas appliquable pour un projet qui ne suit pas l'ensemble de ces conventions déja mentionnées.

Les solutions proposées :

1/ Au niveau de AppKernel,php class, il falait ajouter l’extension avec la fonction addExtension()

2/ soit créer une classe qui termine avec le suffixe Budnle.

L'extension:

config/bundles.php

composer.json