Pull to refresh

Будущий релиз Symfony 4.0 и проект с использованием Symfony Flex

PHP *Symfony *
Tutorial

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



image

Четвертая версия имеет ряд глобальных изменений, основным из которых можно назвать переход на 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.*
Tags:
Hubs:
Total votes 8: ↑6 and ↓2 +4
Views 8.5K
Comments Comments 15