neoDSI   CTO & Développeur back-end symfony
+33 6 62 75 87 89 Contact

Services : utilisation des paramètres et injections d’autres services

Plutôt que d’injecter le container dans un service il est plus pertinent d’injecter seulement les services dont on a besoin.

Déclarer le service

Dans le fichier services.yml du bundle de notre service on a :

parameters:
    neodsi_validation.class: Neodsi\MetierBundle\Lib\Validation

services:
   neodsi_service_validation:
        class: "%neodsi_validation.class%"
        arguments: [@translator, %url%, @neodsi_service_helper]

Le service neodsi_service_validation est déclaré avec la classe dont le nom est indiqué dans le paramètre neodsi_validation.class

Il prend comme argument :

  • le service translator de symfony
  • le paramètre url contenu dans le fichier parameters.yml
  • le service neodsi_service_helper

Le service neodsi_service_helper est un service qui peut être déclaré dans ce fichier services.yml ou dans un autre bundle.

Utiliser les arguments dans la classe

Il suffit ensuite dans le constructeur du service d’indiquer les arguments

public function __construct($translator, $url, $oHelper)

 On peut mettre les noms de variables que l’on veut et éventuellement indiquer le type d’objet avant la variable (par exemple Translator devant $translator).

Services que l’on peut injecter

Parmi les services de symfony utile on peut citer :

  • translator : pour utiliser les traductions dans le service
  • logger : pour faire du log
  • router : pour générer des url (utiliser generate() au lieu de generateUrl() dans ce cas)
  • session : pour utiliser les sessions
  • request_stack : pour utiliser le service de requêtes (utiliser getCurrentRequest() au lieu de la proprieté request dans ce cas)
  • templating : pour utiliser les services de vue (utiliser EngineInterface comme type sans oublier de déclarer use Symfony\Component\Templating\EngineInterface; )