Timur  Gilauri
Timur Gilauri

Reputation: 914

Routing in module doesn't work Yii 2

I am new in Yii 2 and my problem is about routing inside a module. I have a module in my app which is a profile cabinet both for users and admins. I created a CabinetController instead of DefaultController and also I created a AdminController and UserController.

What I want? I want this CabinetController received request and forward it to either AdminController or UserController after verify wether the user is admin or not.

In config file I set a default route for module as "cabinet"(as I understand this is a name for default controller). And in "rules" part of UrlManager I wrote following:

'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>',

  ],
],

If I go to "my-site.com/cabinet" it works fine and open "admin/index" because I made it to redirest this request to AdminController/actionIndex, but once I go to somewhere like "my-site.com/cabinet/users" it respond with 404 NotFound. I open the loger and see: exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "cabinet/desktop"

This is my CabinetController and the way I forward requests to 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);
}

If I change defaultAction in CabinetController it run this action normally as expected. Or if I go to "my-site.com/cabinet/admin/users" again it works good, because it found a controller in the url(as I think).

Upvotes: 0

Views: 1682

Answers (1)

Tim
Tim

Reputation: 305

Routing can be a bit tricky in Yii2, it follows a few rules you need to understand which can be found here

But if i understand you correctly Admin/UserController is part of the Cabinet module? and you want Yii to route /cabinet/users to /cabinet/admin/users

You'll need to add some rules in your UrlManager see Rules

Example:

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

Hope it helps

Upvotes: 2

Related Questions