我正在建立一个拥有"子域名的网站"叫做市场。所以网址将是marketplace.sample.com。我使用的是Yii2高级应用程序,并将以下代码添加到位于前端/ web的index.php中。
defined('MARKETPLACE') or define('MARKETPLACE', preg_match('/^marketplace/', $_SERVER['HTTP_HOST']) === 1 ? true : false);
这适用于我的环境,但是,我刚刚意识到index.php文件位于Yii2中的.gitignore文件中,因为该文件是由init脚本创建的,因此对它的更改将通过运行init来覆盖。
无论如何,问题是:我在哪里放置这些代码,以便可以与开发团队的其他成员一起提交和共享,并在推送代码时将其投入生产?
我试着将这段代码放在common / config / params.php中,但是当我尝试访问变量来确定使用哪条路径时,我不能,因为Yii app在前端没有被初始化/config/main.php文件运行,我收到一个错误,我试图访问非对象的属性。
/frontend/config/main.php
'defaultRoute' => MARKETPLACE ? 'marketplace' : 'site',
/frontend/config/main.php(改为使用param)
'defaultRoute' => Yii::$app->params['marketplace'] ? 'marketplace' : 'site'
这第二个给出了我试图访问非对象属性的错误。
答案 0 :(得分:5)
在目录中:
common/config
您可以使用bootstrap.php文件插入所需的代码。 此文件在启动阶段执行,未在.gitignore中显示。
通过这种方式,您可以分配常量MARKETPLACE,确保在使用GIT时传播代码
答案 1 :(得分:0)
我不知道这是否是您想要完成的最佳实践,但您可以为./init
提供新的初始化环境
environments
文件夹包含dev
和prod
文件夹,其中包含所有未受版本控制且在./init
上设置的文件(分别用于选项) 1) Development
和2) Production
)。 A bit more on environment folders here
例如,假设您要创建开发环境的“自定义”版本,并且您想要修改前端条目脚本。
您可以将environments/dev
文件夹复制到environments/custom
并自定义environments/custom/frontend/web/index.php
文件。
然后将以下内容添加到environments/index.php
:
'Custom' => [
'path' => 'custom',
'setWritable' => [
'backend/runtime',
'backend/web/assets',
'frontend/runtime',
'frontend/web/assets',
],
'setExecutable' => [
'yii',
],
'setCookieValidationKey' => [
'backend/config/main-local.php',
'frontend/config/main-local.php',
],
],
添加并提交您的更改,从此处开始,3) Custom
时您应该有一个新的./init
选项,您和您的开发人员可以使用它来初始化您的应用程序。
PS:我没有对此进行测试,但我认为它应该可行(如果不是只需要进行小的调整)