首页 文章

模块中的路由不起作用Yii 2

提问于
浏览
0

我是Yii 2中的新手,我的问题是关于模块内的路由 . 我的应用程序中有一个模块,它是一个用于用户和管理员的配置文件柜 . 我创建了一个CabinetController而不是DefaultController,还创建了一个AdminController和UserController .

我想要的是?我希望这个CabinetController接收到请求,并在验证用户是否为admin之后将其转发到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/cabinet/users"这样的地方,它会回复404 NotFound . 我打开loger看看: exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "cabinet/desktop"

这是我的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”,它的效果很好,因为它在网址中找到了一个控制器(我认为) .

1 回答

  • 1

    在Yii2中路由可能有点棘手,它遵循一些你需要理解的规则可以找到here

    但如果我理解你正确 Admin/UserControllerCabinet 模块的一部分?你希望Yii将 /cabinet/users 路由到 /cabinet/admin/users

    您需要在UrlManager中添加一些规则,请参阅Rules

    例:

    'rules' => [
        '<module:cabinet>/<action:\w+>' => '<module>/admin/<action>',
    ],
    

    希望能帮助到你

相关问题