我应该把全局变量放在 Yii2 的什么地方,类似于 YII_DEBUG 和 YII_ENV
Where do I put global Variables in Yii2 similar to YII_DEBUG and YII_ENV
我正在建立一个网站,其中有一个名为 marketplace 的 "subdomain"。所以 url 将是 marketplace.sample.com。我正在使用 Yii2 高级应用程序,并将以下代码添加到位于 frontend/web.
的 index.php 中
defined('MARKETPLACE') or define('MARKETPLACE', preg_match('/^marketplace/', $_SERVER['HTTP_HOST']) === 1 ? true : false);
这适用于我的环境,但是,我刚刚意识到 index.php 文件位于 Yii2 的 .gitignore 文件中,因为该文件是由 init 脚本创建的,因此对其所做的更改将被覆盖运行正在初始化。
无论如何,问题是:我应该把这段代码放在哪里,以便它可以提交并与开发团队的其他成员共享,并在推送代码时将其投入生产?
我试图将此代码放在 common/config/params.php 中,但是当我尝试访问该变量以确定要使用的路由时,我不能,因为 Yii 应用程序尚未当 frontend/config/main.php 文件为 运行 时初始化,我收到一个错误,提示我正在尝试访问非对象的 属性。
/frontend/config/main.php
'defaultRoute' => MARKETPLACE ? 'marketplace' : 'site',
/frontend/config/main.php(用参数代替)
'defaultRoute' => Yii::$app->params['marketplace'] ? 'marketplace' : 'site'
第二个错误提示我正在尝试访问非对象的 属性。
在目录中:
common/config
您可以使用 bootstrap.php 文件来插入您需要的代码。
该文件在启动阶段执行,并没有在.gitignore中指明。
通过这种方式,您可以分配常量 MARKETPLACE,确保在使用 GIT
时传播代码
我不知道这是否是您想要完成的最佳实践,但您可以为 ./init
提供一个新的初始化环境
environments
文件夹包含 dev
和 prod
文件夹,其中包含不受版本控制且在 ./init
上设置的所有文件(分别对于选项 1) Development
和 2) Production
)。 A bit more on environment folders here.
例如,假设您想要创建一个 "custom" 版本的开发环境,并且您想要修改前端入口脚本。
您可以将 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',
],
],
添加并提交您的更改,从现在开始,当您 ./init
时,您应该有一个新的 3) Custom
选项,您和您的开发人员可以使用它来初始化您的应用程序。
PS:我还没有测试过这个,但我认为它应该可以工作(如果不仅需要进行小的调整)
我正在建立一个网站,其中有一个名为 marketplace 的 "subdomain"。所以 url 将是 marketplace.sample.com。我正在使用 Yii2 高级应用程序,并将以下代码添加到位于 frontend/web.
的 index.php 中defined('MARKETPLACE') or define('MARKETPLACE', preg_match('/^marketplace/', $_SERVER['HTTP_HOST']) === 1 ? true : false);
这适用于我的环境,但是,我刚刚意识到 index.php 文件位于 Yii2 的 .gitignore 文件中,因为该文件是由 init 脚本创建的,因此对其所做的更改将被覆盖运行正在初始化。
无论如何,问题是:我应该把这段代码放在哪里,以便它可以提交并与开发团队的其他成员共享,并在推送代码时将其投入生产?
我试图将此代码放在 common/config/params.php 中,但是当我尝试访问该变量以确定要使用的路由时,我不能,因为 Yii 应用程序尚未当 frontend/config/main.php 文件为 运行 时初始化,我收到一个错误,提示我正在尝试访问非对象的 属性。
/frontend/config/main.php
'defaultRoute' => MARKETPLACE ? 'marketplace' : 'site',
/frontend/config/main.php(用参数代替)
'defaultRoute' => Yii::$app->params['marketplace'] ? 'marketplace' : 'site'
第二个错误提示我正在尝试访问非对象的 属性。
在目录中:
common/config
您可以使用 bootstrap.php 文件来插入您需要的代码。 该文件在启动阶段执行,并没有在.gitignore中指明。
通过这种方式,您可以分配常量 MARKETPLACE,确保在使用 GIT
时传播代码我不知道这是否是您想要完成的最佳实践,但您可以为 ./init
environments
文件夹包含 dev
和 prod
文件夹,其中包含不受版本控制且在 ./init
上设置的所有文件(分别对于选项 1) Development
和 2) Production
)。 A bit more on environment folders here.
例如,假设您想要创建一个 "custom" 版本的开发环境,并且您想要修改前端入口脚本。
您可以将 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',
],
],
添加并提交您的更改,从现在开始,当您 ./init
时,您应该有一个新的 3) Custom
选项,您和您的开发人员可以使用它来初始化您的应用程序。
PS:我还没有测试过这个,但我认为它应该可以工作(如果不仅需要进行小的调整)