Symfony2在YAML配置中使用PHP类常量?

sam*_*ime 19 php yaml symfony

我知道这可能是不可能的,但有一种干净的方法在YAML config/services/etc中使用PHP类常量.Symfony2的文件?

例如,如果我有这个:

namespace My\Bundle\DependencyInjection;

class MyClass
{
    const MY_CONST = 'cookies';
}
Run Code Online (Sandbox Code Playgroud)

这样的事情是可能的(在.yml文件中):

services:
    my_service:
        class: Some\Class
        arguments:
            - %My\Bundle\DependencyInjection\MyClass::MY_CONST%
Run Code Online (Sandbox Code Playgroud)

这对于帮助保持两者之间的一致性有很大帮助.

Cmy*_*ker 21

对于Symfony> = 2.4,您可以使用表达式语言

例:

'@=constant("Symfony\\Bridge\\Monolog\\Logger::INFO")'
Run Code Online (Sandbox Code Playgroud)


kix*_*kix 17

从Symfony 3.2开始,也可以使用特殊!php/const:语法在YAML文件中使用PHP常量:

parameters:
    bar: !php/const:PHP_INT_MAX
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Symfony博客文章.


请注意:在Symfony 4中,语法略有改变.您必须使用空格而不是双冒号,例如:

parameters:
    bar: !php/const PHP_INT_MAX
Run Code Online (Sandbox Code Playgroud)

否则,您将收到FileLoaderLoadException,并显示消息"Notice:Uninitialized string offset".


dbr*_*ann 16

在Symfony 3.2之前的版本中,注入PHP常量仅适用于XML:

<parameter key="my_service.my_const" type="constant">My\Bundle\DependencyInjection\MyClass::MY_CONST</parameter>
Run Code Online (Sandbox Code Playgroud)

如果要保留yml文件,可以将xml文件导入services.yml.混合配置样式可能有点难看,但据我所知,这是唯一的方法.

如果这不适合您,我对您的问题的评论适用.

  • 您也可以使用PHP而不是XML.添加PHP导入文件可以提供很大的灵活性,只需记住Ben叔叔,并对这个强大的力量负责! (2认同)