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/,这是不可取的。
非常感谢
答案 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