30 Ноября 2017 года состоится релиз Symfony 4.0

Четвертая версия имеет ряд глобальных изменений, основным из которых можно назвать переход на Symfony Flex.
Что же такое Symfony Flex?
Это новый подход к организации приложений на симфони, основаный на «рецептах».
Как заявляют разработчики — это должно упросить работу с зависимостями\бандлами\пакетами и привнести больше автоматизации.
Существует 2 репозитория с рецептами:
Настройка рецепта происходит через manifest.json который содержит набор конфигураторов и опций.
Опции
aliases
Используется для указания альтернативного имени рецепта. Например без использования этой опции рецепт устанавилвается так:
composer req acme-inc/acme-log-monolog-handler
Добавив в manifest.json
{ "aliases": ["acme-log", "acmelog"] }
можно будет использовать
composer req acme-log
Конфигураторы
Набор задач которые будут выполнены при установке рецепта.
bundles
Подключение одного или нескольких бандлов с возможностью указания окружения.
{ "bundles": { "Symfony\\Bundle\\DebugBundle\\DebugBundle": ["dev", "test"], "Symfony\\Bundle\\MonologBundle\\MonologBundle": ["all"] } }
container
Добавление параметров контейнера в services.yaml, например локаль:
{ "container": { "locale": "en" } }
copy-from-package
Копирует папки или файлы из пакета в проект:
{ "copy-from-package": { "bin/check.php": "%BIN_DIR%/check.php" } }
Доступные константы:
%BIN_DIR%, %CONF_DIR%, %CONFIG_DIR%, %SRC_DIR% %VAR_DIR%, %PUBLIC_DIR%
copy-from-recipe
Копирование файлов и директорий из самого рецепта:
"copy-from-recipe": { "config/": "%CONFIG_DIR%/", "src/": "%SRC_DIR%/" }
env
Добавление параметров в .env и .env.dist:
{ "env": { "APP_ENV": "dev", "APP_DEBUG": "1" } }
Можно сгенерировать рандомную 16 битную строку используя %generate(secret)%
gitignore
Добавляет паттерны в .gitignore:
{ "gitignore": [ ".env", "/public/bundles/", "/var/", "/vendor/" ] }
post-install-output
Определяет контент, который будет показан после установки рецепта, должен быть определён в файле post-install.txt, каждая строка закрывается PHP_EOL.
Поддерживаются консольные цвета\стили.
Полный пример manifest.json для symfony/framework-bundle:
{ "bundles": { "Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle": ["all"] }, "copy-from-recipe": { "config/": "%CONFIG_DIR%/", "public/": "%PUBLIC_DIR%/", "src/": "%SRC_DIR%/" }, "composer-scripts": { "make cache-warmup": "script", "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd" }, "env": { "APP_ENV": "dev", "APP_DEBUG": "1", "APP_SECRET": "%generate(secret)%" }, "gitignore": [ ".env", "/public/bundles/" "/var/", "/vendor/" ] }
Собираем первый проект на Symfony Flex
Будем использовать последнюю доступную на момент написания статьи версию — «v4.0.0-RC1»
Для начала нам понадобится composer.
Давайте создадим проект:
composer create-project symfony/skeleton flex-test-project "v4.0.0-RC1"
Изначально нам доступны только официальные рецепты. Для использование рецептов сторонних разработчиков необходимо выполнить:
composer config extra.symfony.allow-contrib true
или самостоятельно добавить
"extra": { "symfony": { "allow-contrib": "true" }
в composer.json
Для запуска можно использовать встроеный в PHP веб-сервер или поставить web-server-bundle через его рецепт:
composer req web-server bin/console server:start
Так же, нам потребуется профайлер и генератор, который теперь называется maker-bundle.
Для профайлера необходим twig.
composer req twig composer req web-profiler-bundle
А для генератора аннотации так же возможно необходимо будет понизить требования к minimum-stability в *composer.json*.
"minimum-stability": "dev"
composer req maker composer req annotations bin/console make:controller
Готово.

Для поиска по рецептам можно использовать https://symfony.sh/.
Основные изменения в грядущей версии.
Репозиторий на github
Апгрейд с 3.* до 4.*
