我试图寻找有关使用Symfony Flex的任何文档,但是到目前为止没有找到。
几乎所有文档都指向安装一个使用Symfony Flex的bundle,而不是如何创建一个正在使用它的bundle。
我甚至试图反向工程一些软件包,但同样没有成功。
我的目标是在config/packages/my_bundle.yaml
中为我的bundle生成默认配置文件。
我需要知道的是,在哪里放置这个文件以及会有哪些环境变量(如果有)可用?
我试图寻找有关使用Symfony Flex的任何文档,但是到目前为止没有找到。
几乎所有文档都指向安装一个使用Symfony Flex的bundle,而不是如何创建一个正在使用它的bundle。
我甚至试图反向工程一些软件包,但同样没有成功。
我的目标是在config/packages/my_bundle.yaml
中为我的bundle生成默认配置文件。
我需要知道的是,在哪里放置这个文件以及会有哪些环境变量(如果有)可用?
请注意,Flex Recipe是一个单独的代码仓库,需要与包仓库分开托管,并且需要独立于Bundle包进行托管。
对于大多数公共Bundle/Recipe而言,您需要将Recipe提交到“contrib”仓库,获得批准并合并后,才能作为社区Recipe提供。
此外,请记住,大多数用户默认情况下不会启用contrib仓库。因此,如果安装此Bundle很重要,则在用户安装Recipe之前应告知用户如何启用contrib仓库(例如在Bundle的自述文件中)。
另一种选择是使用私有Flex Recipe,如此处所述。生成私有Recipe的最简单方法是遵循Symfony的相同步骤。查看此问题及其答案以获取更多详情:如何从Recipe目录的内容生成私有Recipe JSON?
现在,基本上,Flex Recipe就是一个带有特定密钥的manifest.json
文件的代码仓库,以启用某些“配置器”。
可用的manifest.json
配置器包括:
这些应在bundles.php
上启用的Bundle。这些将在安装Recipe时添加,然后在卸载Recipe时删除。
{
"bundles": {
"Symfony\\Bundle\\DebugBundle\\DebugBundle": ["dev", "test"],
"Symfony\\Bundle\\MonologBundle\\MonologBundle": ["all"]
}
}
"configuration" 配置器处理两个键: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
的内容将被复制到相应的目录。
这是提供默认配置文件的典型用例。根据您的要求,这是创建flex recipe的目的。
此配置程序只是将适当的环境变量值添加到项目的.env
和.env.dist
中。(如果您卸载了该recipe,则这些环境变量也将被删除)
{
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1"
}
}
该配置器从项目的composer.json
中添加任务到scripts:auto-scripts
数组中。 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命令,所以这个比其他配置程序用得少。
你可以在这里阅读完整的文档。