Я новичок в Yii 2, и моя проблема связана с маршрутизацией внутри модуля. В моем приложении есть модуль, который представляет собой профильный кабинет как для пользователей, так и для администраторов. Я создал CabinetController вместо DefaultController, а также создал AdminController и UserController.
Что я хочу? Я хочу, чтобы этот запрос CabinetController получил и перенаправил его либо AdminController, либо UserController после проверки того, является ли пользователь администратором или нет.
В файле конфигурации я установил маршрут по умолчанию для модуля как «шкаф» (насколько я понимаю, это имя для контроллера по умолчанию). И в части «правил» 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);
}
Если я изменю defaultAction в CabinetController, он запустит это действие, как и ожидалось. Или, если я снова зайду на «my-site.com/cabinet/admin/users», он работает хорошо, потому что он нашел контроллер в URL-адресе (как я думаю).