Как прочитать настройки конфигурации из конфигурации 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"));
...
}