2017-03-16 55 views
0

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

我想要什么?我希望这个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”它工作正常,打开“管理员/指标”,因为我把它给redirest这个请求到AdminController/actionIndex,但是一旦我去了“my-site.com/cabinet/users”之类的地方,它会以404 NotFound响应。我打开loger看到:例外“警予\基地\ InvalidRouteException”有消息“无法解析请求‘柜/桌面’

这是我CabinetController,我将请求转发给管理员/ 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中发现了一个控制器(就像我认为的那样)。

回答

0

路由可以在Yii2有点棘手,它遵循它可以发现here

你需要了解一些规则,但如果我理解正确的话Admin/UserControllerCabinet模块的一部分?和你想的Yii路由/cabinet/users/cabinet/admin/users

你需要添加在你的UrlManager一些规则见Rules

例子:

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

希望它可以帮助