我试图找到任何有关使用 Symfony Flex 的文档,但到目前为止还没有运气。
几乎所有文档都指向安装使用 symfony Flex 的包,而不是如何创建使用它的包。
我什至尝试对一些软件包进行逆向工程,但同样没有运气。
我的目标是为我的捆绑包生成一个默认配置文件config/packages/my_bundle.yaml
。
我需要知道的是我需要把它放在哪里以及我可以使用哪些环境变量(如果有的话)?
我试图找到任何有关使用 Symfony Flex 的文档,但到目前为止还没有运气。
几乎所有文档都指向安装使用 symfony Flex 的包,而不是如何创建使用它的包。
我什至尝试对一些软件包进行逆向工程,但同样没有运气。
我的目标是为我的捆绑包生成一个默认配置文件config/packages/my_bundle.yaml
。
我需要知道的是我需要把它放在哪里以及我可以使用哪些环境变量(如果有的话)?
请记住,flex 配方是与您的包存储库分开的存储库,需要托管在 Flex 服务器上。该过程使食谱对第三方捆绑包(IMO)的用处大大降低。对于“官方”Symfony 食谱来说,它非常简洁,但对于其他用户来说却不是那么好。
最有可能的是,您必须将您的配方提交到contrib 存储库,使其获得批准和合并,以便它可以作为社区配方使用。(另一种选择是拥有一个自托管的 Flex 服务器,但这仅在测试配方时有用,如有必要)。
此外,重要的是要记住大多数用户不会默认启用 contrib 存储库。因此,如果这对于安装此捆绑包很重要,您应该在用户安装您的配方之前告诉他们如何执行此操作(例如,在捆绑包的自述文件中)。
顺便说一句:基本上,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
。第一个可以从配方存储库中复制文件,第二个可以从包存储库中复制文件。
{
"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
和.env.dist
. (同样,如果您卸载了配方,这些将被删除)
{
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1"
}
}
此配置器将任务scripts: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
)、shell 脚本 ( script
) 或 Symfony 命令 ( symfony-cmd
, 执行方式bin/console
)。
这会将条目添加到项目的.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 不存在,则创建它)。
cache-clear:
@test -f bin/console && bin/console cache:clear --no-warmup || rm -rf var/cache/*
.PHONY: cache-clear
就那么简单。我猜大多数包都不需要 makefile 命令,所以这比其他配置器的使用要少得多。
您可以在此处阅读完整的文档。