2017-03-16 7 views
0

私はYii 2で新しく、問題はモジュール内のルーティングです。 私のアプリには、ユーザーと管理者の両方のプロファイルキャビネットであるモジュールがあります。 DefaultControllerの代わりにCabinetControllerを作成し、AdminControllerとUserControllerも作成しました。モジュール内のルーティングが機能しないYii 2

私は何をしたいですか?私はこのCabinetControllerがリクエストを受け取り、ユーザーがadminかどうかを確認した後、AdminControllerまたはUserControllerに転送します。

configファイルでは、モジュールのデフォルトルートを「キャビネット」として設定します(これはデフォルトコントローラーの名前です)。そして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を開いて参照してください。メッセージと例外「のYii \ベースの\ 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にコントローラーが見つかりました(私が思う)。ルーティングYii2に少しトリッキーなことができ

答えて

0

、それはあなたがhere

を見つけることができるかを理解する必要がありますが、私は正しくあなたを理解していればAdmin/UserControllerCabinetモジュールの一部であるいくつかのルールに従いますか?そして、あなたはあなたがRules

例を参照してくださいあなたのUrlManagerにいくつかのルールを追加する必要があります

/cabinet/admin/usersにルート /cabinet/usersへのYiiをしたい:

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

は、それが

を役に立てば幸い
関連する問題