Как изменить модуль yii2 по умолчанию - PullRequest
0 голосов
/ 15 января 2019

Здравствуйте, я не эксперт в Yii2 и буду признателен за любую помощь. Мы хотим изменить наш модуль по умолчанию,
Наша логика:

сайт реализует использование подстановочного домена, https://example.com,
мы реализуем компонент начальной загрузки, чтобы определить использование «поддомен» в URL 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',
],...

Теперь мы хотели бы использовать ту же логику, чтобы изменить модуль по умолчанию на новый «подмодуль», но мы не можем использовать загрузчик, потому что это происходит после применения модуля по умолчанию.

очевидно, что мы можем иметь явный URL-вызов для модуля I.E.

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

но это означает, что URL будет выглядеть как https://somesub.example.com/sub/, что нежелательно.

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 15 января 2019

В вашем случае вы можете переопределить компонент 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',
    ...
],
0 голосов
/ 15 января 2019

Вам не нужно менять конфигурацию модуля. Вам нужно изменить путь веб-сервера к этому модулю и создать правила UrlManager; https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing

Bootstraping yii module - это всего лишь способ загрузить его перед другими компонентами. https://www.yiiframework.com/doc/guide/2.0/en/runtime-bootstrapping

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...