2016-01-14 1 views
3

Je veux définir un alias pour un service afin de pouvoir utiliser différents services dans différents environnements. Donc, voici le services.yamlSymfony - Comment définir un alias pour un service en utilisant la valeur d'un paramètre

. 
. 
. 
register_request: 
     alias: %register_request_service% 
main_register_request: 
     class: AppBundle\Services\Requests\RegisterRequest 
null_register_request: 
     class: AppBundle\Services\Requests\NullRegisterRequest 
. 
. 
. 

et dans mon environnement de développement du parameters.yml ressemble:

. 
. 
. 
    register_request_service: null_register_request 
. 
. 
. 

Mais ça ne marche pas! quand je l'utilise clear:cache il dit:

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] 
    Unable to replace alias "%register_request_service%" with "register_request". 

    [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] 
    The service definition "%register_request_service%" does not exist. 

Toute idée sur ce que je suis absent?

Répondre

2

œuvres de réponse Elnur mais j'ai décidé de résoudre le problème de cette façon:

J'ai créé un fichier de configuration de services pour l'environnement de dev (services_dev.yml) et le service ne remplacer en elle. Ainsi, le services.yml ressemble:

# app/config/services.yml 
# ... 
services: 
    # ... 
    register_request: 
      class: AppBundle\Services\Requests\RegisterRequest 
    # ... 

et services_dev.yml ressemble:

# app/config/services_dev.yml 
services: 
    register_request: 
      class: AppBundle\Services\Requests\NullRegisterRequest 

Ensuite, je l'ai importé le services_dev.yml dans dans config_dev.yml

# app/config/config_dev.yml 
imports: 
    - { resource: config.yml } 
    - { resource: services_dev.yml } 

# ... 

De cette façon, le processus d'installation de l'application n'a pas besoin des informations supplémentaires sur le nom de ces classes.

2

Il est plus facile de définir simplement le nom de la classe en tant que paramètre. C'est l'idiome utilisé beaucoup dans Symfony lui-même et ses paquets.

+0

Je suis d'accord avec la réponse d'Alireza. Dans le document sur les meilleures pratiques, il est indiqué que «Ne définissez pas de paramètres pour les classes de vos services». Même si je suis d'accord que vous ne devez suivre aucun document aveuglément au départ, avoir des services basés sur l'environnement signifie que quelqu'un installant votre application web n'a pas constamment besoin de définir une valeur dans 'parameters.yml'. –

+0

Ai-je dit quelque chose à propos de 'parameters.yml'? –

+0

Non. Vous n'avez rien dit à propos de l'endroit où définir les paramètres, et l'endroit habituel pour définir les paramètres est dans le fichier qui porte leur nom. Votre réponse est seulement un paragraphe, donc je dois deviner la plupart de ce que vous voulez dire; désolé si mes suppositions échouent. –