2017-03-16 39 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>', 
], 

希望它可以幫助