Symfony2 Использовать константу класса PHP в конфигурации YAML?

Я знаю, что это, вероятно, невозможно, но есть ли чистый способ использования константы класса PHP в конфигурации / сервисах YAML / etc. файл для Symfony2?

Например, если у меня есть это:

namespace My\Bundle\DependencyInjection; class MyClass { const MY_CONST = 'cookies'; } 

Возможно что-то подобное (в файле .yml):

 services: my_service: class: Some\Class arguments: - %My\Bundle\DependencyInjection\MyClass::MY_CONST% 

Это проделало бы долгий путь, помогая поддерживать согласованность между ними.

Solutions Collecting From Web of "Symfony2 Использовать константу класса PHP в конфигурации YAML?"

В версиях до Symfony 3.2 впрыскивание PHP-констант работает только с XML:

 <parameter key="my_service.my_const" type="constant">My\Bundle\DependencyInjection\MyClass::MY_CONST</parameter> 

Если вы хотите сохранить yor yml-файлы, вы можете просто импортировать xml-файл в свой services.yml. Смешивание конфигурационных стилей может быть немного уродливым, но насколько я знаю, это единственный способ сделать это.

Если это не сработает для вас, мой комментарий к вашему вопросу применим.

Для Symfony> = 2.4 вы можете использовать язык выражения

Пример:

 '@=constant("Symfony\\Bridge\\Monolog\\Logger::INFO")' 

Начиная с Symfony 3.2, также можно использовать PHP-константы в файлах YAML с использованием специального !php/const: синтаксиса:

 parameters: bar: !php/const:PHP_INT_MAX 

Дополнительную информацию см. В сообщении блога Symfony .

Это возможно, но только при использовании кода eval'd, который, как правило, неодобрительно.

Учитывая константу класса Permission :: ACCESS_NONE, например, вы можете сделать что-то подобное в файле yaml:

 permission: ACCESS_NONE 

и в коде, где вы разбираете yaml:

eval("return \The\Complete\Namespace\To\Permission::".$context['permission'].";");

Это, конечно, прикольный код, но он работает.

Должна быть возможность вставить аргумент как простой «текст» в config и внутри класса __construct($constant1) затем запросить константу через переменную constant($constant1) .

Но я не уверен в глобальных константах здесь, потому что они не могут быть определены во время использования, но это не должно быть проблемой для констант класса с полным пространством имен, потому что локатор пространства имен уже определен в момент вызова класса.

Пример config:

 services: my_service: class: Some\Class arguments: - 'My\Bundle\DependencyInjection\MyClass::MY_CONST' 

и метод класса класса:

 public function __construct($arg1) { $myRequiredConstantValue = constant($arg1); } 

Это должно работать

 arguments: - <?php echo My\Bundle\DependencyInjection\MyClass::MY_CONST."\n" ?>