Как прочитать настройки конфигурации из конфигурации Symfony2.в формате YML?

я добавил параметр в свою конфигурацию.файл yml как таковой:

app.config:
    contact_email: somebody@gmail.com
    ...

для жизни меня, я не могу понять, как прочитать его в переменную. Я попробовал что-то подобное в одном из моих контроллеров:

$recipient =
$this->container->getParameter('contact_email');

, но я получаю сообщение об ошибке, говорящее:

параметр "contact_email" должен быть определенный.

я очистил свой кэш, я также искал везде на документации сайта Symfony2 reloaded, но я не могу узнать, как сделать это.

наверное, просто слишком устал, чтобы понять это сейчас. Кто-нибудь может помочь?

6 ответов


вместо определения contact_email внутри app.config, определить его в parameters запись:

parameters:
    contact_email: somebody@gmail.com

вы должны найти вызов, который вы делаете в вашем контроллере теперь работает.


в то время как решение о переезде в contact_email to parameters.yml легко, как предложено в других ответах, что может легко загромождать файл параметров, если вы имеете дело со многими пакетами или если вы имеете дело с вложенными блоками конфигурации.

  • во-первых, я отвечу строго на вопрос.
  • позже я дам подход для получения этих конфигураций из служб, никогда не проходя через общее пространство в качестве параметров.

ПЕРВЫЙ ПОДХОД: Разделенный конфигурационный блок, получающий его в качестве параметра

с пристройкой (подробнее о расширениях здесь) вы можете держать это легко "разделены" на различные блоки в config.yml а затем ввести это в качестве параметра gettable от контроллера.

внутри вашего класса расширения внутри


Я должен добавить к ответу Дугласа, вы можете получить доступ к глобальной конфигурации, но symfony переводит некоторые параметры, например:

# config.yml
... 
framework:
    session:
        domain: 'localhost'
...

are

$this->container->parameters['session.storage.options']['domain'];

Вы можете использовать var_dump для поиска заданного ключа или значения.


для того, чтобы иметь возможность выставить некоторые параметры конфигурации для вашего комплекта следует обратиться к документации для этого. Это довольно легко сделать :)

вот ссылка: как выставить семантическую конфигурацию для пакета


Как было сказано ранее - вы можете получить доступ к любым параметрам с помощью контейнера инъекций и использовать его свойство parameter.

"Symfony-работа с определениями контейнерных сервисов" хорошая статья об этом.


я узнал простой способ из примера кода http://tutorial.symblog.co.uk/

1) Обратите внимание на ZendeskBlueFormBundle и расположение файла

# myproject/app/config/config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: @ZendeskBlueFormBundle/Resources/config/config.yml }

framework:

2) уведомление Zendesk_BlueForm.электронная почта.contact_email и расположение файла

# myproject/src/Zendesk/BlueFormBundle/Resources/config/config.yml

parameters:
    # Zendesk contact email address
    Zendesk_BlueForm.emails.contact_email: dunnleaddress@gmail.com

3) Обратите внимание, как я получаю его в $client и расположение файла контроллера

# myproject/src/Zendesk/BlueFormBundle/Controller/PageController.php

    public function blueFormAction($name, $arg1, $arg2, $arg3, Request $request)
    {
    $client = new ZendeskAPI($this->container->getParameter("Zendesk_BlueForm.emails.contact_email"));
    ...
    }