Новое в Symfony Flex 1.2

Symfony Flex является рекомендуемой зависимостью современных приложений Symfony, которая повышает скорость разработки за счет автоматизации повторяющихся и скучных задач, таких как установка и автоматическая настройка пакетов и других библиотек.

Symfony Flex 1.2 был выпущен с некоторыми полезными новыми функциями!

Упрощенное обновление рецептов

Рецепты Symfony определяют инструкции, используемые Symfony Flex для установки и настройки зависимостей в ваших приложениях. Разработчики Symfony постоянно обновляют рецепты, чтобы включить новые функции, представленные библиотеками, или новую конфигурацию для лучшей работы. Вам не нужно применять эти обновленные рецепты к вашему приложению. Но их применение иногда может показать вам новые функции, которые вы, возможно, захотите использовать в своих приложениях.

В Symfony Flex уже есть команда sync-recipes для установки или переустановки рецептов для пакетов, установленных в приложении. Однако эта команда не выполняет рецепт снова, если рецепт уже был выполнен. Итак, обновленная версия рецепта никогда не применяется к существующим приложениям.

Symfony Flex 1.2 представляет новую опцию --force для синхронизации рецептов, чтобы безоговорочно запускать все рецепты снова для всех пакетов. На практике это означает, что Symfony выполнит последний рецепт, но вы потеряете все сделанные вами изменения в файлах, затронутых рецептами. Решением является проверка изменений с помощью git diff и применение / отклонение каждого изменения рецепта:

composer sync-recipes --force

  Symfony operations: 10 recipes (8967ada4e2fe4a57735c35d43dd14035)
    - Configuring symfony/flex: From github.com/symfony/recipes:master
    - Configuring symfony/framework-bundle: From github.com/symfony/recipes:master
    - Configuring doctrine/doctrine-bundle: From github.com/symfony/recipes:master
    - ...

    * Use git diff to inspect the changes.

      Not all of the changes will be relevant to your app: you now
      need to selectively add or revert them using e.g. a combination
      of git add -p and git checkout -p

    * Use git checkout . to revert the changes.

      New (untracked) files can be inspected using git clean --dry-run
      Add the new files you want to keep using git add
      then delete the rest using git clean --force

Улучшена обработка файлов .env

Если вы создали приложение Symfony после декабря 2018 года или недавно обновили рецепты с помощью sync-recipes --force, вы увидите важные изменения, связанные с файлами конфигурации .env *.

Эти файлы теперь всегда загружаются, даже если вы установите переменную окружения APP_ENV = prod. Цель состоит в том, чтобы файл .env определял значения по умолчанию, которые можно переопределить реальными значениями среды или создав файл .env.local.

Если вы не хотите разбирать файлы .env * при каждом запросе, Symfony Flex 1.2 включает новую команду dump-env, которая компилирует содержимое файлов .env * в PHP-оптимизированный файл с именем .env.local.php:

composer dump-env prod

Successfully dumped .env files in .env.local.php

Затем этот файл автоматически читается файлом config/bootstrap.php. И хотя эта команда необязательна, но это может быть полезным во время развертывания на прод, чтобы повысить производительность приложения (так же, как вы делаете это с другими командами, такими как composer dump-autoload -o).

Другие улучшения

Автоматическая установка нескольких пакетов

В настоящее время любой пакет с типом symfony-bundle в его файле composer.json включается как пакет Symfony при его установке, даже если для него не определен рецепт Symfony Flex.

В Symfony Flex 1.2 теперь включены все пакеты, найденные в конфигурации автозагрузки файла composer.json, а не только первый.

Противоречивые рецепты

Теперь рецепты могут включать в свои манифесты ключ конфликта, чтобы определить пакеты и версии, которые не совместимы с ним. Если при установке рецепта обнаруживается конфликт, Symfony Flex отображает сообщение о том, что установка рецепта была пропущена, и причина этого:

{
    "...": "...",
    "conflict": {
        "symfony/messenger": "^4.2",
        "symfony/console": "<3.*"
    }
}