Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony2 Use PHP Class Constant in YAML Config?

Tags:

php

yaml

symfony

I know this is probably not possible, but is there a clean way to use a PHP class constant within a YAML config/services/etc. file for Symfony2?

For example, if I have this:

namespace My\Bundle\DependencyInjection;

class MyClass
{
    const MY_CONST = 'cookies';
}

Is something like this possible (in a .yml file):

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

That'd go a long way in helping maintain consistency between the two.

like image 512
samanime Avatar asked Feb 05 '13 18:02

samanime


3 Answers

For Symfony >=2.4 you can use expression language

Example:

'@=constant("Symfony\\Bridge\\Monolog\\Logger::INFO")'
like image 171
Cmyker Avatar answered Nov 09 '22 17:11

Cmyker


As of Symfony 3.2, it's also possible to use PHP constants in YAML files using a special !php/const: syntax:

parameters:
    bar: !php/const:PHP_INT_MAX

See the Symfony blog post for more details.


Please note: In Symfony 4 the syntax was slightly changed. You have to use a space instead of a double colon, for example:

parameters:
    bar: !php/const PHP_INT_MAX

Otherwise, you will get a FileLoaderLoadException with the message "Notice: Uninitialized string offset".

like image 24
kix Avatar answered Nov 09 '22 18:11

kix


In versions before Symfony 3.2, injecting PHP-constants only works with XML:

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

If you want to keep yor yml files, you could just import the xml-file into your services.yml. Mixing config styles might be a bit ugly, but as far as I know this is the only way to do it.

If this doesn't work for you, my comment to your question applies.

like image 17
dbrumann Avatar answered Nov 09 '22 16:11

dbrumann