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