繁体   English   中英

我在哪里将全局变量放在Yii2中类似于YII_DEBUG和YII_ENV

[英]Where do I put global Variables in Yii2 similar to YII_DEBUG and YII_ENV

我正在建立一个名为“市场”的“子域名”网站。 所以网址将是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应用程序在前端/ config / main时没有被初始化。 php文件运行,我收到一个错误,我试图访问非对象的属性。

/frontend/config/main.php

'defaultRoute' => MARKETPLACE ? 'marketplace' : 'site',

/frontend/config/main.php(改为使用param)

'defaultRoute' => Yii::$app->params['marketplace'] ? 'marketplace' : 'site'

第二个给出了我试图访问非对象属性的错误。

在目录中:

 common/config 

您可以使用bootstrap.php文件插入所需的代码。 此文件在启动阶段执行,未在.gitignore中指示。

通过这种方式,您可以在使用GIT时分配常量MARKETPLACE,确保传播代码

我不知道这是否是您想要完成的最佳实践,但您可以为./init提供新的init环境

environments文件夹包含一个devprod文件夹,其中包含所有未受版本控制且在./init上设置的./init (分别用于选项1) Development2) Production )。 这里有更多关于环境文件夹的信息

例如,假设您要创建开发环境的“自定义”版本,并且您想要修改前端条目脚本。

您可以将environments/dev文件夹复制到environments/custom并在那里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',
        ],
    ],

添加并提交您的更改,从此处开始,当您./init并且您和您的开发人员可以使用它来初始化您的应用程序时,您应该有一个新的3) Custom选项。

PS:我没有对此进行过测试,但我认为它应该可行(如果不是只需要进行小的调整)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM