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



我是yii 2中的新手,我的问题是在模块内路由。我的应用中有一个模块,该模块是用户和管理员的配置柜。我创建了一个CabinetController而不是DefaultController,也创建了一个AdminController和UserController。

我想要什么?我希望此机柜Controller收到请求并将其转发给AdminController或UserController,验证用户是否为管理员。

在配置文件中,我将模块的默认路由设置为"机柜"(据我所知,这是默认控制器的名称)。在Urlmanager的"规则"一部分中,我写了以下内容:

'modules' => [
  'cabinet' => [
    'class' => 'appmodulescabinetModule',
    'defaultRoute' => 'cabinet'
  ],
  'utility' => [
    'class' => 'c006utilitymigrationModule',
  ],
],
'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/action indindex,但是一旦我去了像" mySite"之类的地方.com/cabinet/用户"它响应404 notfound。我打开LOGER并查看:异常'yii base invalidRouteexception'带有消息'无法解决" Cabinet/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中的默认值,它将按预期运行此操作。或者,如果我再次转到" my-site.com/cabinet/admin/users",它可以很好地工作,因为它在URL中找到了一个控制器(如我所想)。

路由在yii2中可能有点棘手,它遵循您需要了解的一些规则,可以在此处找到

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

您需要在Urlmanager中添加一些规则,请参见规则

示例:

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

希望它有帮助

最新更新