wemakecustom /symfony-app-loader
Composer 脚本处理您忽略的 app_loader.ini 文件
Requires
- php: >=5.3.3
- sensio/distribution-bundle: ^4.0|^5.0
- symfony/framework-bundle: ^2.3|^3.0
- wemakecustom/composer-script-utils: ^2.0
Requires (Dev)
README
此包为 Symfony 提供统一的入口控制器,将所有选项合并为一个 AppLoader。所有选项都可以使用自定义入口控制器或扩展 AppLoader 来覆盖。
此工具使用一个脚本,在运行 composer install 或 update 时会要求您输入参数,这与 incenteev/composer-parameter-handler 非常相似。
安装
在您的根 composer.json 文件中添加以下内容
{ "require": { "wemakecustom/symfony-app-loader": "~1.0@dev" }, "scripts": { "post-install-cmd": [ "WMC\\AppLoader\\ScriptHandler::buildParameters", ], "post-update-cmd": [ "WMC\\AppLoader\\ScriptHandler::buildParameters", ] } }
将 web/app.php
替换为该包中的版本。有关更多详细信息,请参阅 使用入口控制器覆盖选项 部分。
将 app/console
替换为该包中的版本。
在 .gitignore 中忽略您的 ini 文件
/app/config/app_loader.ini
Composer 脚本配置
不同的文件和 dist 文件
Composer 脚本将创建或更新 app/config/app_loader.ini
,以匹配 dist 文件 app/config/app_loader.ini.dist
的结构,通过询问您缺失的参数。如果您的 Symfony 安装中没有可用的 app/config/app_loader.ini.dist
,它将使用默认版本。
默认情况下,假定 dist 文件位于与参数文件相同的位置,文件名后缀为 .dist
。这可以在配置中进行更改。
{ "extra": { "wmc-app-loader": { "file": "app/config/app_loader.ini", "dist-file": "some/other/folder/to/other/parameters/file/app_loader.ini.dist" } } }
保留过时参数
脚本处理器将交互式地询问您参数文件中缺失的参数,使用 dist 文件的值作为默认值。所有提示的值都作为内联 INI 解析,以便您轻松地定义 true
、false
或数字。如果 composer 以非交互式模式运行,则使用 dist 文件的值用于缺失的参数。
警告:此脚本会从 app_loader.ini
中删除不在 app_loader.ini.dist
中的过时参数。如果您需要保留过时参数,可以在配置中使用 keep-outdated
参数。
{ "extra": { "wmc-app-loader": { "keep-outdated": true, } } }
使用环境变量设置参数
对于您的生产环境,在部署时可能无法使用交互式提示。在这种情况下,您可以使用环境变量来提供参数。这是通过提供环境变量和它们应填充的参数之间的映射来实现的。
{ "extra": { "wmc-app-loader": { "env-map": { "my_first_param": "MY_FIRST_PARAM", "my_second_param": "MY_SECOND_PARAM" } } } }
如果设置了环境变量,其值将始终替换现有参数文件中设置的值。
由于环境变量只能是字符串,因此它们也被解析为内联 INI 值,以便轻松指定 false
、true
或数字。
警告:此参数处理器将覆盖您的 app_loader.ini 文件中的任何注释或空格,因此请谨慎处理。因此,如果您想为参数文件提供格式和注释,您应该在 dist 版本中完成此操作。
自定义行为
使用前端控制器覆盖选项
标准控制器位于 web/app*.php
。建议在开发配置中复制所有文件。虽然在生产环境中并非必需,但通常只保留 web/app.php
。
如示例所示,在实例化 AppLoader 之后,但在 $app_loader->run();
之前,您可以覆盖任何选项。
可用的选项有
environment
:(dev|test|prod)debug
:(true|false) 当环境 == dev 时自动猜测http_cache
:(true|false) 是否使用 Symfony HTTP 反向代理localhost_only
:(true|false) 在开发模式下是否限制请求到 localhostumask_fix
:(true|false) 是否将 umask 更改为 0000apc_cache_id
:(false|string) 如果是有效的字符串,则用作缓存中的 APC id
通过扩展 AppLoader 覆盖行为
提供的 AppLoader 可以完全覆盖。您可以扩展它,并修改您的前端控制器以使用自己的实现。请参阅 sample/AppLoader 以获取示例。