如何为新捆绑包编写Symfony Flex配方?

Hub*_*NNN 2 php symfony symfony-flex symfony4

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

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

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

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

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

yiv*_*ivi 5

什么是Flex食谱?

请记住,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"]
    }
}
Run Code Online (Sandbox Code Playgroud)

组态

“配置”配置器处理两个键:copy-from-recipecopy-from-package。第一个可以从配方存储库复制文件,第二个可以从软件包存储库复制文件。

{
    "copy-from-package": {
        "bin/check.php": "%BIN_DIR%/check.php"
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/",
        "src/": "%SRC_DIR%/"
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,一个文件bin/check.php将被复制到的项目%BIN_DIR%,与内容configsrc对食谱包将被复制到的相应目录。

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

环境变量

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

{
    "env": {
        "APP_ENV": "dev",
        "APP_DEBUG": "1"
    }
}
Run Code Online (Sandbox Code Playgroud)

作曲家脚本

此配置器将scrits: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"
    }
}
Run Code Online (Sandbox Code Playgroud)

在每一行指定了第二部分什么它是命令的:常规PHP脚本(php-script),一个外壳脚本(script),或一个命令Symfony的(symfony-cmd通过执行bin/console)。

吉特尼奥雷

这会将条目添加到项目的.gitignore文件中。就那么简单。

{
    "gitignore": [
        "/phpunit.xml"
    ]
}
Run Code Online (Sandbox Code Playgroud)

的完整示例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/"
    ]
}
Run Code Online (Sandbox Code Playgroud)

附加配置器

有两个不依赖于manifest.json文件的配置器:

安装后输出。

如果post-install.txt配方包中存在一个名为的文件,则在安装完成后会显示其内容。您甚至可以使用此处定义的样式获得更多的美感/令人讨厌。

例:

{
    "bundles": {
        "Symfony\\Bundle\\DebugBundle\\DebugBundle": ["dev", "test"],
        "Symfony\\Bundle\\MonologBundle\\MonologBundle": ["all"]
    }
}
Run Code Online (Sandbox Code Playgroud)

安装完成后,这将显示给用户。

生成文件

如果Makefile配方存储库中存在一个名为的文件,则此处定义的任务将添加到项目的Makefile中(如果不存在则创建Makefile)。

{
    "copy-from-package": {
        "bin/check.php": "%BIN_DIR%/check.php"
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/",
        "src/": "%SRC_DIR%/"
    }
}
Run Code Online (Sandbox Code Playgroud)

就那么简单。我猜比大多数软件包都不需要makefile命令,因此它比其他配置程序的使用要少得多。

您可以在此处阅读完整的文档。

  • 感谢您的详细描述。那么基本上没有办法将它包含在捆绑包本身中吗?由于我的包是私有包,因此不可能使用 symfony flex(因为我需要发布配方,可能还需要发布包),而无需首先对项目进行额外的配置。 (2认同)