Как исправить ParameterCircularReferenceException?

У меня есть приложение Symfony2. Ранее мы настроили стек разработки docker-compose для разработки, и поэтому мы хотим, чтобы вся его конфигурация ставилась через переменные окружения, а не parameters.yml.

Следовательно, я заменил содержимое моих параметров.yml из:

parameters:
locale: 'en'
secret: 'SOME_SECURITY_TOKEN'
...

чтобы:

parameters:
locale: '%locale%'
secret: '%secret%'
...

мой docker-compose.yml файл содержит:

my_app:
hostname: my-app
build: .
dockerfile: Dockerfile.dev
ports:
- "9080:80"- "9043:433"environment:
LOCALE: en
SECRET: SOME_SECURITY_TOKEN
...

Тем не менее, после восстановления моего контейнера я получаю исключение:

ParameterCircularReferenceException in ParameterBag.php line 209: Circular reference detected for parameter "secret" ("secret" > "secret").
1. in ParameterBag.php line 209
2. at ParameterBag->resolveString('%secret%', array('secret' => true)) in ParameterBag.php line 185
3. at ParameterBag->resolveValue('%secret%', array('secret' => true)) in ParameterBag.php line 214
4. at ParameterBag->resolveString('%secret%', array('secret' => true)) in ParameterBag.php line 185
5. at ParameterBag->resolveValue('%secret%', array()) in ParameterBag.php line 175
6. at ParameterBag->resolveValue(array('secret' => '%secret%', 'router' => array('resource' => '%kernel.root_dir%/config/routing.yml', 'strict_requirements' => null), 'form' => null, 'csrf_protection' =>
null, 'validation' => array('enable_annotations' => true), 'templating' => array('engines' => array('twig')), 'default_locale' => '%locale%', 'trusted_hosts' => null, 'trusted_proxies' => null,
'session' => array('handler_id' => 'api.session.handler.memcached'), 'fragments' => null, 'http_method_override' => true), array()) in ParameterBag.php line 175
7. at ParameterBag->resolveValue(array(array('secret' => '%secret%', 'router' => array('resource' => '%kernel.root_dir%/config/routing.yml', 'strict_requirements' => null), 'form' => null,
'csrf_protection' => null, 'validation' => array('enable_annotations' => true), 'templating' => array('engines' => array('twig')), 'default_locale' => '%locale%', 'trusted_hosts' => null,
'trusted_proxies' => null, 'session' => array('handler_id' => 'api.session.handler.memcached'), 'fragments' => null, 'http_method_override' => true), array('router' =>
array('resource' => '%kernel.root_dir%/config/routing_dev.yml', 'strict_requirements' => true), 'profiler' => array('only_exceptions' => false)))) in MergeExtensionConfigurationPass.php line 45
8. at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in MergeExtensionConfigurationPass.php line 39
9. at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in Compiler.php line 107
10. at Compiler->compile(object(ContainerBuilder)) in ContainerBuilder.php line 589
11. at ContainerBuilder->compile() in bootstrap.php.cache line 2687
12. at Kernel->initializeContainer() in bootstrap.php.cache line 2465
13. at Kernel->boot() in bootstrap.php.cache line 2496
14. at Kernel->handle(object(Request)) in app_dev.php line 30

Тем не менее в моем контейнере я вижу переменные env:

le-container:/var/www/my-app# env
SECRET=SOME_SECURITY_TOKEN
LOCALE=en

Что я делаю не так и как это исправить?

0

Решение

По какой-то причине добавление префикса к моей переменной среды решило проблему:

parameters:
locale: '%foo_locale%'
secret: '%foo_secret%'

и, конечно же, всякий раз, когда переменная установлена. Моя текущая рабочая теория заключается в том, что symfony не нравится иметь одно и то же имя параметра и переменную env, но я не уверен.

1

Другие решения

parameters:
locale: '%locale%'
secret: '%secret%'

Бесполезная конструкция, локаль и секрет уже есть параметры. Просто удалите этот блок.

0

Есть решение использовать внешние параметры. Префикс ваших переменных с «SYMFONY__». В вашем случае это будет:

my_app:
...
environment:
SYMFONY__APP__LOCALE: en
SYMFONY__APP__SECRET: SOME_SECURITY_TOKEN
...

И в ваших параметрах вы можете назвать это следующим образом:

parameters:
locale: %app.locale%
secret: %app.secret%
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector