Привет.
Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (private recipes). Для этого нам понадобится: проект, репозиторий с бандлом, репозиторий с нашими рецептами.
Статья содержит много изображений, поэтому ссылки на репозитории размещаю здесь, а все остальное вынесу под кат.
Бандл: symfony-acme-bundle
Рецепты: symfony-recipes
Итак, поехали.
1) Создаем новый проект или используем существующий. Главное условие — это иметь установленный Symfony Flex. Я решил создать проект с нуля.
Для создания нового проекта используем команду
composer create-project symfony/skeleton symfony-acme-project
Проект успешно создан, а в установленных пакетах мы видим symfony/flex.
2) Создаем новый бандл (symfony-acme-bundle) или используем существующий. Я решил создать простой бандл с нуля и зарегистрировать его в packagist.org. Ссылку на репозиторий можно найти в начале статьи. Процессы создания и регистрации бандла я опустил, т.к. в них нет ничего сложного.
3) Подключение и настройка Symfony Flex Server. Для этого переходим на Symfony Recipes Server и кликаем на ссылку «register» в секции «Private Recipes BETA». Также можно зарегистрироваться через Symfony Flex Server.
Выбираем наш репозиторий с рецептами и нажимаем «Install».
После этого мы должны увидеть страницу с поздравлением.
4) Создаем рецепт.
Этот пункт я разбил на 2 части. Сначала мы создадим репозиторий, а затем добавим новый рецепт через pull request.
4.1) Создаем новый репозиторий (symfony-recipes) и добавляем файлы: LICENSE, config.json, README.md (опционально). Ссылку на репозиторий можно найти в начале статьи.
Нам очень важен config.json, а именно те данные, которые он содержит.
{
"projects": {
"01C1K60FQVPP7FN6C3YB6639RZ": "Symfony Acme Project"
}
}
«01C1K60FQVPP7FN6C3YB6639RZ» — это ID нашего Symfony проекта. Найти его можно в файле composer.json проекта, созданного в п.1.
{
"extra": {
"symfony": {
"id": "01C1K60FQVPP7FN6C3YB6639RZ",
"allow-contrib": false
}
}
}
или выполнив в папке с проектом команду
composer config extra.symfony.id
4.2) Добавляем рецепт. Для этого создаем новую ветку (add-acme-recipe) и добавляем 3 файла: manifest.json, post-install.txt и config/packages/acme.yaml. Важный момент — название папки с рецептом должно совпадать с названием пакета (бандла) в packagist.org, а также должны совпадать версии. В нашем случае это «yurijbogdanov/acme-bundle» и версия «1.0».
Пример содержимого файлов:
yurijbogdanov/acme-bundle/1.0/manifest.json
{
"bundles": {
"Acme\AcmeBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"ACME_FOO": "hello",
"ACME_BAR": "world"
}
}
yurijbogdanov/acme-bundle/1.0/post-install.txt
<bg=blue;fg=white> </>
<bg=blue;fg=white> Next: Configuration </>
<bg=blue;fg=white> </>
* Modify your ACME_FOO config in <fg=green>.env</>
* Modify your ACME_BAR config in <fg=green>.env</>
* Configure your parameters in <fg=green>config/packages/acme.yaml</>
yurijbogdanov/acme-bundle/1.0/config/packages/acme.yaml
acme:
foo: hello
bar: world
Далее добавляем нашу ветку с рецептом в удаленный репозиторий и делаем pull request.
Теперь несколько слов почему лучше добавлять рецепты через pull request, а не прямо в master (даже если вы работаете одни).
Каждый раз, когда вы делаете pull request ваш код будет проходить проверку ботом symfony-flex-server и даже малейшие отклонения от требований будут фиксироваться.
Кликнув по ссылке «Details», можно просмотреть какие именно ошибки были найдены ботом.
В случае успеха вы увидите approve от бота и сможете сделать merge в master.
Ветка успешно смерджена и теперь можно перейти к установке пакета (бандла).
5) Добавляем бандл в наш проект. Для этого переходим в папку с проектом и выполняем команду
composer require yurijbogdanov/acme-bundle
Бандл успешно установлен с помощью нашего рецепта.
Symfony operations: 1 recipe (7302152d871c6cc69ec5de45f91d1b38)
- Configuring yurijbogdanov/acme-bundle (>=1.0): From github.com/yurijbogdanov/symfony-recipes:master
Рецепт внес следующие изменения в проект:
1) добавил бандл в config/bundles.php
<?php
return [
SymfonyBundleFrameworkBundleFrameworkBundle::class => ['all' => true],
AcmeAcmeBundle::class => ['all' => true],
];
2) добавил переменные окружения в .env.dist
###> yurijbogdanov/acme-bundle ###
ACME_FOO=hello
ACME_BAR=world
###< yurijbogdanov/acme-bundle ###
3) добавил файл конфигурации acme.yaml в config/packages/
Спасибо за внимание.
Автор: yurijbogdanov