Как написать рецепт Symfony Flex для нового пакета? - PullRequest
2 голосов
/ 28 октября 2019

Я пытался найти какую-либо документацию по использованию Symfony Flex, но пока безуспешно.

Почти все документы указывают на установку пакета, использующего Symfony Flex, а не на то, как создать пакет, использующий его.

Я даже пытался выполнить обратный инжиниринг некоторых пакетов, но опять не повезло.

Моя цель - создать файл конфигурации по умолчанию для моего пакета в config/packages/my_bundle.yaml.

Что мне нужно знать, это где мне нужно поместить его и какие переменные env (если таковые имеются) будут у меня доступны?

1 Ответ

5 голосов
/ 28 октября 2019

Что такое рецепт Flex?

Имейте в виду, что рецепт flex представляет собой отдельный репозиторий от вашего репозитория пакетов, который необходимо разместить на сервере Flex. Процесс создания рецептов гораздо менее полезен для сторонних комплектов, IMO. Это очень удобно для «официальных» рецептов Symfony, но не так много для других пользователей.

Скорее всего, вам придется отправить свой рецепт в репозиторий contrib , получить его одобрение иобъединены, так что это доступно как рецепт сообщества. (Другим вариантом будет иметь самосмещенный сервер Flex , но это полезно только при тестировании рецепта, если необходимо).

Кроме того, важно помнить, что большинство пользователей не будет иметь репозиторий contrib по умолчанию . Поэтому, если это важно для установки этого комплекта, вы должны сообщить своим пользователям, как это сделать, прежде чем они установят ваш рецепт (например, в файле readme вашего комплекта).

С этим вне пути: в основном, рецепт Flex - это хранилище с файлом manifest.json с конкретными ключами для включения определенных «конфигураторов».

Доступные manifest.json конфигураторы:

Пакеты

Какие пакеты должны быть включены на bundles.php. Они добавляются, когда рецепт установлен, и удаляются, когда рецепт удаляется.

{
    "bundles": {
        "Symfony\\Bundle\\DebugBundle\\DebugBundle": ["dev", "test"],
        "Symfony\\Bundle\\MonologBundle\\MonologBundle": ["all"]
    }
}

Конфигурация

Конфигуратор «конфигурации» имеет дело с двумя ключами: copy-from-recipe и copy-from-package,Первый может копировать файлы из репозитория recipe , второй копирует файлы из репозитория package .

{
    "copy-from-package": {
        "bin/check.php": "%BIN_DIR%/check.php"
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/",
        "src/": "%SRC_DIR%/"
    }
}

В этом примере файл bin/check.php в пакете будет скопировано в проекты %BIN_DIR%, а содержимое config и src в пакете рецептов будет скопировано в соответствующий каталог.

Этонапример, типичный вариант использования для предоставления файлов конфигурации по умолчанию. Исходя из того, что вы спрашиваете, это ваша заявленная цель для создания гибкого рецепта.

Env Vars

Этот конфигуратор просто добавляет соответствующие значения переменных среды в .env и * 1057 проекта*. (Опять же, они будут удалены, если вы удалите рецепт)

{
    "env": {
        "APP_ENV": "dev",
        "APP_DEBUG": "1"
    }
}

Сценарии Composer

Этот конфигуратор добавляет задачи в массив scrits:auto-scripts из composer.json проекта. auto-scripts - это задачи, которые выполняются каждый раз, когда composer update или composer install выполняются в проекте.

{
    "composer-scripts": {
        "vendor/bin/security-checker security:check": "php-script",
        "make cache-warmup": "script",
        "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
    }
}

Вторая часть в каждой строке указывает, что вид командыэто: обычный PHP-скрипт (php-script), сценарий оболочки (script) или команда Symfony (symfony-cmd, выполняемая через bin/console).

Gitignore

Это добавит записи в файл .gitignore проекта. Все просто.

{
    "gitignore": [
        "/phpunit.xml"
    ]
}

Полный пример manifest.json (взято отсюда, как и большинство других примеров в этом посте):

{
    "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/"
    ]
}

Дополнительные конфигураторы

Существует два конфигуратора, которые не полагаются на файл manifest.json:

Вывод после установки.

Если в пакете рецепта существует файл с именем post-install.txt, его содержимоеотображается после завершения установки. Вы можете даже использовать стили , как определено здесь , для дополнительной красивости / отвратительности.

Пример:

<bg=green;fg=white>                </>
<bg=green;fg=white> Much success!! </>
<bg=green;fg=white>                </>

  * <fg=yellow>Next steps:</>
    1. Foo
    2. <comment>bar</>;
    3. Baz <comment>https://example.com/</>.

Это будет представлено пользователю после завершения установки.

Makefile

Если в репозитории рецепта существует файл с именем Makefile, определенные здесь задачи будут добавлены в Makefile проекта (создающий Makefile, если он не существует).

cache-clear:
    @test -f bin/console && bin/console cache:clear --no-warmup || rm -rf var/cache/*
.PHONY: cache-clear

Все просто. Я полагаю, что большинству пакетов не понадобится команда makefile, поэтому она будет гораздо менее полезна, чем другие конфигураторы.

Вы можете прочитать полную документацию здесь .

...