Depuis Symfony 2.8, le nouveau service « auto wiring » (comprenez branchement automatique) va permettre à Symfony d’être encore plus magique qu’il ne l’est déjà ! Mais je ne sais pas si c’est vraiment une bonne idée.
D’après la news : Symfony 2.8: Service Auto Wiring, on aura la possibilité de déclarer un service en omettant les paramètres passé au constructeur. La magie opérera : un service privé sera créé pour la classe omise et il sera injecté directement dans le constructeur du service déclaré.
Exemple avec un service Mailer
qui a besoin d’un Logger pour fonctionner.
Déclaration classique :
# app/config/services.yml
services:
logger:
class: AppBundle\Service\Logger
mailer:
class: AppBundle\Service\Mailer
arguments: ['@logger']
Déclaration magique :
# app/config/services.yml
services:
mailer:
class: AppBundle\Service\Mailer
autowire: true
La c’est trop magique à mon goût et je ne sais pas si les performances seront impactées.
En tout cas, c’est déjà bien que cette fonctionnalité soit désactivée par défaut ;)