我是 Yii 2 的新手,我的问题是关于模块内部的路由。我的应用程序中有一个模块,它是用户和管理员的配置文件柜。我创建了一个 CabinetController 而不是 DefaultController,还创建了一个 AdminController 和 UserController。
我想要的是?我希望这个 CabinetController 收到请求,并在验证用户是否为管理员后将其转发给 AdminController 或 UserController。
在配置文件中,我将模块的默认路由设置为“cabinet”(据我所知,这是默认控制器的名称)。在 UrlManager 的“规则”部分,我写了以下内容:
'modules' => [
'cabinet' => [
'class' => 'app\modules\cabinet\Module',
'defaultRoute' => 'cabinet'
],
'utility' => [
'class' => 'c006\utility\migration\Module',
],
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<_c:\w+>/' => '<_c>/',
'<_c:[\w\-]+>/<_a:\w+>' => '<_c>/<_a>',
'<_m:cabinet>/<_a:\w+>' => '<_a>',
],
],
如果我转到“my-site.com/cabinet”,它可以正常工作并打开“admin/index”,因为我已经将此请求重新定向到 AdminController/actionIndex,但是一旦我转到“my-site.com/”之类的地方机柜/用户”它以 404 NotFound 响应。我打开记录器并看到: 异常 'yii\base\InvalidRouteException' 带有消息“无法解析请求“内阁/桌面”
这是我的 CabinetController 以及我将请求转发给 Admin/UserController 的方式:
public function init()
{
parent::init();
$this->user = $this->findModel();
$this->controllerToUse = $this->user->isAdmin() ? 'admin' : 'user';
}
public function actionIndex()
{
return $this->module->runAction($this->controllerToUse . '/' . $this->action->id);
}
如果我在 CabinetController 中更改 defaultAction,它会按预期正常运行此操作。或者,如果我再次访问“my-site.com/cabinet/admin/users”,它工作得很好,因为它在 url 中找到了一个控制器(我认为)。