Новое в Symfony 3.2: PHP константы в Yaml файлах

new-in-symfony-3-2

Приветствую всех кто ко мне зашел, в преддверии выхода новой версии Symfony 3.2 этот пост будет посвящен переводу следующей заметке о нововведениях в официальном блоге symfony.

YAML это по праву самый популярный формат для определения конфигурации Symfony приложений. К сожалению из-за своей природы Yaml формат не предоставляет таких же возможностей как другие форматы такие как XML. В частности не возможно использовать PHP константы в YAML файлах, для примера в качестве аргументов сервисов.

В Symfony 3.2 мы решили дополнить возможности YAML формата, с помощью расширения для поддержки PHP констант. Если какая то строка в YAML файле имеет префикс !php/const:, то теперь эта строка будет считаться PHP константой:

parameters:
    # this is considered a regular string
    foo: PHP_INT_MAX
    # this is considered a PHP constant
    bar: !php/const:PHP_INT_MAX

По умолчанию Symfony YAML компонент разбирает/генерирует только совместимое со стандартом YAML содержимое. Поэтому при самостоятельном использовании YAML компонента необходимо включить эту функцию в явном виде флагом YAML::PARSE_CONSTANT:

use Symfony\Component\Yaml\Yaml;

$yaml = <<<YAML
foo:
    !php/const:PHP_INT_MAX
YAML;

$config = Yaml::parse($yaml, Yaml::PARSE_CONSTANT);
// $config = array('foo' => PHP_INT_MAX);

Если вы используете Symfony фреймворк, то эта возможность включена по умолчанию в классе YamlFileLoader используемого в компоненте DependencyInjection. Это означает, что вы можете использовать PHP константы в ваших YAML сервисах из коробки:

# app/config/services.yml
services:
    app.my_service:
        # ...
        arguments:
            - '@app.other_service'
            - !php/const:AppBundle\Entity\BlogPost::MUM_ITEMS
            - !php/const:Symfony\Component\HttpKernel\Kernel::VERSION

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *