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.*