Как прочитать параметры конфигурации из конфигурации Symfony2.в формате YML?
я добавил параметр в мою конфигурацию.файл yml как таковой:
app.config:
contact_email: [email protected]
...
для жизни меня, я не могу понять, как прочитать его в переменную. Я попробовал что-то вроде этого в одном из моих контроллеров:
$recipient =
$this->container->getParameter('contact_email');
, но я получаю сообщение об ошибке, говорящее:
параметр "contact_email" должен быть
определенный.
я очистил свой кэш, я также искал везде на Symfony2 перезагрузил документацию сайта, но я не могу узнать, как это сделать сделать это.
наверное, просто слишком устал, чтобы понять это сейчас. Кто-нибудь может помочь с этим?
6 ответов:
вместо определения
contact_emailвнутриapp.config, определить его вparametersзапись:parameters: contact_email: [email protected]вы должны найти вызов, который вы делаете в вашем контроллере теперь работает.
в то время как решение о переезде в
contact_emailдо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: [email protected]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")); ... }
Comments