lab*_*key 6 yii2 yii2-advanced-app
我正在开发基于Yii2框架的多个网站,我想知道是否有任何好方法或者是否创建共享基本配置main.php文件甚至是好主意.
这背后的原因是我的所有项目都基于相同的系统,有很多相似之处,我只想保持干燥.配置也大致相同 - 唯一的区别实际上是数据库名称和其他一些值.甚至urlManager规则也没有那么不同.
问题是,例如,当我想FileTarget为所有网站添加额外的记录器目标时,我必须分别为每个项目执行此操作,我永远无法确定所有项目配置是否都是最新的并且所有设置都正确.
所以我想知道是否有任何Yii方式创建在多个项目中共享的默认配置文件,或者它只是一个坏主意.例如,我可以创建bootstrap组件来设置默认值,或者将默认配置添加为文件中合并配置列表中的第一项frontend\web\index.php.我在作曲家中添加了私有包,因此添加将在所有项目中共享的文件不是问题.
小智 6
我在很长一段时间内都在研究同一个问题,并尝试了几个想法.
目前,我为您描述的问题开发了很好的解决方案.解决方案的核心是hiqdev/composer-config-plugin - composer插件,它融合了扩展中的配置.
例如,我们的扩展是我们所有web项目的基础hiqdev/hisite-core它包含基本的Yii应用程序配置和参数:
return [
'id' => 'hisite',
'name' => 'HiSite',
'aliases' => [
'@bower' => '@vendor/bower-asset',
...
Run Code Online (Sandbox Code Playgroud)
这些配置在composer.json中使用以下行启用:
"extra": {
"config-plugin": {
"params": "src/config/params.php",
"hisite": "src/config/hisite.php"
}
},
Run Code Online (Sandbox Code Playgroud)
就是这样.你需要hiqdev/hisite-core并且在运行composer update之后你在vendor/hiqdev/config/hisite.php中组装了配置(你可能有多个配置)
然后你从index.php中使用它,如下所示:
$config = require dirname(dirname(__DIR__)) . '/hiqdev/config/hisite.php';
Run Code Online (Sandbox Code Playgroud)
您可以使用Yii扩展引导实现类似的行为,但是引导程序必须在每个页面请求上运行.
该解决方案的优点在于,您可以拥有许多组件,每个组件都提供自己的配置部分,并且它可以在不减慢页面渲染时间的情况下工作,因为配置在composer安装/更新时合并一次.(并且你可以强制使用composer dump-autoload合并配置,不要忘记在更改配置后运行它).
使用这种技术,我们创建了自动插件扩展:主题,模块和更多不需要在主配置中配置的 - 你只需要在composer.json中使用它们就可以了.
这个解决方案仍在进行中,它将不断发展和变化,但我们将它用于具有30多个扩展的非常大的基于Yii2的应用程序,并且已经过测试且足够稳定.
作为一个更简单的替代方案,您可以将文件放在某处并将其包含在所有配置中,即
$commonConfig = require '/var/www/common/config.php';
$appConfig = require 'configs/main.php';
$config = array_merge($commonConfig, $appConfig);
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |