Приветствую всех кто ко мне зашел, в преддверии выхода новой версии 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