How to change yii2 default module

时间:2019-01-15 10:52:20

标签: module yii2

Hello I am not an expert in Yii2 and would appreciate any help, We want to change our default module,
Our logic:

site implements a use of wildcard domain, https://example.com
的组件     我们实现了一个引导程序组件,以标识在     网址I.E. https://sub.example.com

$config = [
'id' => 'basic',
'name' => 'exapmle',
'basePath' => dirname(__DIR__),
'bootstrap' => [
    'log',
    'devlogin',
    'app\components\SubBootstrap', #this is the bootstrap component we use
    'app\components\ThemeBootstrap',
],...

现在,我们希望使用相同的逻辑将默认模块更改为新的“子模块”,但是我们无法使用引导程序,因为它会在应用默认模块后发生。

显然,我们可以对模块I.E.进行显式的url调用。

'modules' => [
    'sub'=>[
        'class' => 'app\modules\sub\Module',
    ],...

但这意味着该网址看起来像https://somesub.example.com/sub/,这是不可取的。

非常感谢

2 个答案:

答案 0 :(得分:1)

对于您而言,您可以做的是覆盖UrlManager组件,并手动调整路径以反映您要在后台调用的模块。

因此您的代码应如下所示:

<?php

namespace app\components;

use Yii;

class UrlManager extends \yii\web\UrlManager
{
    public function parseRequest($request)
    {
        if (!empty(Yii::$app->sub)) {
            $pathInfo = $request->pathInfo;
            $moduleIds = array_keys(Yii::$app->modules);
            $inModule = false;
            foreach ($moduleIds as $moduleId) {
                if (preg_match("/^{$moduleId}/", $pathInfo)) {
                    $inModule = true;
                    break;
                }
            }

            if (!$inModule) {
                $pathInfo = 'sub/' . $pathInfo;
                $request->setPathInfo($pathInfo);
            }
        }

        return parent::parseRequest($request);
    }
}

,然后在config / web.php中:

'urlManager' => [
    'class' => 'app\components\UrlManager',
    ...
],

答案 1 :(得分:0)

您不需要更改模块配置。您需要更改此模块的Web服务器路径,并使用UrlManager规则进行构建。 https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing

引导yii模块,这只是在其他组件之前加载它的某种方式。 https://www.yiiframework.com/doc/guide/2.0/en/runtime-bootstrapping