php - 如何为新 bundle 编写Symfony Flex配方?

标签 php symfony symfony4 symfony-flex

我试图找到有关使用Symfony Flex的任何文档,但到目前为止还没有运气。

几乎所有文档都指向安装使用symfony Flex的捆绑软件,而不是如何创建使用它的捆绑软件。

我什至试图对某些软件包进行逆向工程,但是再一次,没有运气。

我的目标是为config/packages/my_bundle.yaml中的捆绑包生成一个默认配置文件。

我需要知道的是我需要在哪里放置它以及可以使用哪些env变量(如果有)?

最佳答案

什么是Flex食谱?

请记住,Flex配方是与软件包存储库分开的单独存储库,它需要托管在Flex服务器上。此过程使配方对于第三方捆绑包(IMO)的用处大大降低。对于“官方” Symfony食谱来说,它非常整洁,但对其他用户而言却不是那么多。

最有可能的是,您必须将食谱提交到contrib repository,使其获得批准并合并,以便可以作为社区食谱使用。 (另一种选择是使用self-hosted Flex server,但这仅在测试配方时有用,如有必要)。

此外,重要的是要记住,默认情况下,大多数用户不会启用contrib存储库。因此,如果这对于安装此软件包很重要,则应在安装配方之前(例如在软件包的自述文件中)告诉用户如何操作。

这样就可以了:基本上,Flex配方是一个带有manifest.json文件的存储库,该文件带有用于启用某些“配置程序”的特定键。

可用的manifest.json配置器为:

捆绑

应该在bundles.php上启用哪些捆绑软件。这些在安装配方时添加,并在卸载配方时删除。

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

配置

“配置”配置器处理两个键:copy-from-recipecopy-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%中,并且配方包中configsrc的内容将被复制到相应的目录中。

例如,这是提供默认配置文件的典型用例。根据您的要求,这是您想要创建弹性配方的既定目的。

环境变量

该配置器只是将适当的环境变量值添加到项目的.env.env.dist中。 (同样,如果您卸载了配方,这些将被删除)
{
    "env": {
        "APP_ENV": "dev",
        "APP_DEBUG": "1"
    }
}

Composer 脚本

该配置器将任务从项目的​​scripts:auto-scripts添加到composer.json数组中。 auto-scripts是在项目中每次执行composer updatecomposer 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执行)。

git 尼奥雷

这会将条目添加到项目的.gitignore文件中。
{
    "gitignore": [
        "/phpunit.xml"
    ]
}
manifest.json的完整示例(从here提起,如同本文中的大多数其他示例一样):
{
    "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的文件,则安装完成后将显示其内容。您甚至可以使用as defined here样式来获得更多的美感/令人讨厌。

例子:

<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命令,因此与其他配置程序相比,它的使用要少得多。

您可以阅读完整的文档here

关于php - 如何为新 bundle 编写Symfony Flex配方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595101/

相关文章:

php - 使用 PHP 将表插入到具有更多列的其他表中

php - 在 Symfony2 中为电子邮件模板动态生成内联 css 样式

php - Symfony 4 : use localizeddate

symfony - 在 Symfony 中注册用户后登录并设置 Remember_me cookie

php - 从具有多个对象的表单中保存数据

php - 获取所选下拉列表的值以与另一个下拉列表进行比较

php - 如何根据用户的IP地址获取用户的位置?

php - 页面不显示特殊字符

php - 将 PDF 存储在 MySQL 数据库中

php - Symfony mongo-odm-aggregation-bundle 求和