J'ai ajouté un paramètre à mon fichier config.yml en tant que tel:
app.config:
contact_email: somebody@gmail.com
...
Pour la vie de moi, je ne peux pas comprendre comment le lire dans une variable. J'ai essayé quelque chose comme ça dans l'un de mes contrôleurs:
$recipient =
$this->container->getParameter('contact_email');
Mais j'obtiens une erreur disant:
Le paramètre "contact_email" doit être défini.
J'ai vidé mon cache, j'ai également regardé partout dans la documentation du site rechargé Symfony2, mais je ne peux pas trouver comment faire cela.
Probablement trop fatigué pour comprendre cela maintenant. Quelqu'un peut-il aider avec ça?
symfony
configuration
josef.van.niekerk
la source
la source
swiftmailer: delivery_address: [email protected]
Vous pouvez trouver plus d'informations dans le livre de recettes Symfony2%parameter_name%
notation - (en YAML)Alors que la solution de déplacer le
contact_email
versparameters.yml
est simple, comme proposé dans d'autres réponses, cela peut facilement encombrer votre fichier de paramètres si vous traitez avec de nombreux bundles ou si vous traitez des blocs de configuration imbriqués.PREMIÈRE APPROCHE: bloc de configuration séparé, l'obtenir comme paramètre
Avec une extension ( plus d'informations sur les extensions ici ), vous pouvez garder cela facilement "séparé" en différents blocs dans le
config.yml
, puis l'injecter en tant que paramètre récupérable par le contrôleur.Dans votre classe Extension dans le
DependencyInjection
répertoire, écrivez ceci:Puis dans votre config.yml, config_dev.yml et ainsi vous pouvez définir
Pour pouvoir traiter cela
config.yml
dans votre,MyNiceBundleExtension
vous aurez également besoin d'uneConfiguration
classe dans le même espace de noms:Ensuite, vous pouvez obtenir la configuration de votre contrôleur, comme vous le souhaitez dans votre question d'origine, mais en gardant la
parameters.yml
netteté et en la définissant dans lesconfig.yml
sections séparées:DEUXIÈME APPROCHE: bloc de configuration séparé, injectant la configuration dans un service
Pour les lecteurs à la recherche de quelque chose de similaire mais pour obtenir la configuration d'un service, il existe même un moyen plus agréable qui n'encombre jamais l'espace commun des "paramètres" et n'a même pas besoin de
container
d'être transmis au service (passer le conteneur entier est pratique pour éviter).Cette astuce ci-dessus "injecte" encore dans l'espace des paramètres votre config.
Néanmoins, après avoir chargé votre définition du service, vous pouvez ajouter un appel de méthode comme par exemple
setConfig()
qui injecte ce bloc uniquement dans le service.Par exemple, dans la classe Extension:
Ensuite, dans votre
services.yml
vous définissez votre service comme d'habitude, sans aucun changement absolu:Et puis dans votre
SillyManager
classe, ajoutez simplement la méthode:Notez que cela fonctionne également pour les tableaux au lieu des valeurs scalaires! Imaginez que vous configurez une file d'attente de lapin et que vous avez besoin d'un hôte, d'un utilisateur et d'un mot de passe:
Bien sûr, vous devez changer votre arbre, mais vous pouvez ensuite faire:
puis dans le service faire:
J'espère que cela t'aides!
la source
MyNiceProjectExtension->load()
méthode avec cette ligne:$container->setParameter( 'my_nice_project.contact_email', $processedConfig[ 'contact_email' ]);
. Merci Xavi!Je dois ajouter à la réponse de douglas, vous pouvez accéder à la configuration globale, mais symfony traduit certains paramètres, par exemple:
sont
Vous pouvez utiliser var_dump pour rechercher une clé ou une valeur spécifiée.
la source
Afin de pouvoir exposer certains paramètres de configuration de votre bundle, vous devez consulter la documentation pour ce faire. C'est assez facile à faire :)
Voici le lien: Comment exposer une configuration sémantique pour un bundle
la source
Comme il le disait précédemment - vous pouvez accéder à tous les paramètres en utilisant le conteneur d'injection et utiliser sa propriété de paramètre.
«Symfony - Working with Container Service Definitions» est un bon article à ce sujet.
la source
J'ai appris un moyen facile à partir de l'exemple de code de http://tutorial.symblog.co.uk/
1) Notez le ZendeskBlueFormBundle et l'emplacement du fichier
2) notez Zendesk_BlueForm.emails.contact_email et l'emplacement du fichier
3) Remarquez comment je l'obtiens dans $ client et l'emplacement du fichier du contrôleur
la source