Module 如何更改yii2默认模块
您好,我不是Yii2方面的专家,非常感谢您的帮助,我们希望更改默认模块,Module 如何更改yii2默认模块,module,yii2,Module,Yii2,您好,我不是Yii2方面的专家,非常感谢您的帮助,我们希望更改默认模块, 我们的逻辑: 站点使用通配符域, 我们实现了一个引导组件来识别在 网址,即 现在我们希望使用相同的逻辑将默认模块更改为新的“子模块”,但我们不能使用引导,因为它发生在应用默认模块之后 显然,我们可以对模块进行显式url调用,即 'modules' => [ 'sub'=>[ 'class' => 'app\modules\sub\Module', ],... 但这意味着
我们的逻辑:
站点使用通配符域,
我们实现了一个引导组件来识别在 网址,即 现在我们希望使用相同的逻辑将默认模块更改为新的“子模块”,但我们不能使用引导,因为它发生在应用默认模块之后 显然,我们可以对模块进行显式url调用,即
'modules' => [
'sub'=>[
'class' => 'app\modules\sub\Module',
],...
但这意味着url看起来是不受欢迎的
非常感谢您无需更改模块配置。您需要更改此模块的web服务器路径,并按照UrlManager规则进行归档; 引导yii模块只是在其他组件之前加载它的一种方式。
在您的情况下,您可以做的是覆盖
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);
}
}
模块的名称是否取决于子域,还是希望/在每个子域上调用相同的模块?根据需要,您可以设置为“sub/default/index”或配置漂亮的URL:@cebe我们每次都需要相同的模块。此外,它不仅是一个很好的url,而且最好的做法是将sub的逻辑与代码库的其余部分分开。谢谢谢谢@Chaim真的很有魅力,就是这样。
<?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);
}
}
'urlManager' => [
'class' => 'app\components\UrlManager',
...
],