d’avoir la dépendance • Toujours passer la dépendance • Sauf si $dep=null Setter • Dépendance optionnelle • Typage • Vérifier que la dépendance est bien là. Propriété - • Aucun moyen de s’assurer que la dépendance est bien injectée. • Typage impossible.
<container> <services> <service id="my_mailer" class="AppBundle\Mail\Mailer"></service> </services> </container> use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller { public function mailAction() { $this-‐>get('my_mailer')-‐>sendEmail(); } } étape 1: déclaration de service étape 2 : faire appel au service
• app(Prod|Dev)(Debug)ProjectContainer.php existe • l’application n’est pas en mode debug • si le fichier app(Prod|Dev) (Debug)ProjectContainer.php.meta existe • Ressources n’ont pas changées depuis la dernier boot du kernel et ou et app(Prod|Dev)(Debug)ProjectContainer.php.meta contient la liste des resources ajoutées au containerBuilder, serialisée
Chargement des classes d’extensions [1] ! • Appel de la méthode build() [2] ! • Passe de compilation chargée d’appeler la méthode load() de toutes les extensions 3
{ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this-‐>processConfiguration($configuration, $configs); $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader-‐>load('services.xml'); } } Classe d’extension Rappel
process($containerBuilder) de toutes les passes de compilations [4] • Résout les paramètres « %xxxxxx% » • Ajout des paramètres dans le FrozenParameterBag Lecture seule
services dans le ContainerBuilder http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html Point d’extension ! [4] CompilerPassInterface::process() http://afsy.fr/avent/2013/05-conteneur-de-services-creer-ses-propres-tags
Le code est créé pour remplir le fichier app(Prod|Dev)(Debug)ProjectContainer. • Le fichier est écrit. récupérer le container Kernel Symfony\Component\HttpKernel