4

我正在建立一个网站,它有一个名为市场的“子域”。所以网址将是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 中,但是当我尝试访问变量以确定要使用哪个路由时,我不能,因为当前端/config/main.php 时 Yii 应用程序尚未初始化。 php 文件运行,我得到一个错误,我试图访问一个非对象的属性。

/frontend/config/main.php

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

/frontend/config/main.php (用参数代替)

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

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

4

2 回答 2

5

在目录中:

 common/config 

您可以使用 bootstrap.php 文件插入您需要的代码。该文件在启动阶段执行,在 .gitignore 中没有说明。

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

于 2015-04-16T16:56:32.787 回答
0

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

environments文件夹包含 adevprod文件夹,其中包含不受版本控制且已设置的所有文件./init(分别用于 options1) Development2) Production)。更多关于环境文件夹的信息

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

您可以将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:我还没有对此进行测试,但我认为它应该可以工作(如果不仅需要进行细微的调整)

于 2015-04-17T01:27:17.260 回答