2016-01-21 84 views
0

我想以一種方式配置Yii2 url管理器,如果在url中跳過控制器名稱,它應該調用默認的控制器進行操作。我已經設法實現這個沒有行動參數。但在動作名稱中使用參數時會卡住。模塊和參數的Yii2 url規則

這裏是我的路線配置:

return [ 
    'catalog/category/<alias:[\w-]+>' => 'catalog/default/category', 
    'catalog/<action:\w+>' => 'catalog/default/<action>', 
]; 

控制器的文件:

namespace app\modules\catalog\controllers; 

use yii\base\Controller; 
use app\modules\catalog\models\Categories; 

class DefaultController extends Controller 
{ 
    public function actionShopbydepartment() 
    { 
     $data['categories'] = Categories::findParentSubHierarchy(); 
     return $this->renderPartial('shopbydepartment', $data); 
    } 

    public function actionCategory($alias = null) 
    { 
     die(var_dump($alias)); 
     $data['category'] = Categories::findCategoryBySlug($alias); 
     return $this->render('category', $data); 
    } 
} 

,當我訪問以下網址它完美地加載。 http://domain.com/index.php/catalog/shopbydepartment

但是,當我訪問以下網址叫正確的功能,但沒有通過$別名值: http://domain.com/index.php/catalog/category/appliances

UPDATE:

我用以下方法進行模塊明智url規則聲明: https://stackoverflow.com/a/27959286/1232366

這裏是我在主配置文件中有:

'rules' => [ 
      [ 
       'pattern' => 'admin/<controller:\w+>/<action:[\w-]+>/<id:\d+>', 
       'route' => 'admin/<controller>/<action>' 
      ], 
      [ 
       'pattern' => 'admin/<module:\w+>/<controller:\w+>/<action:[\w-]+>/<id:\d+>', 
       'route' => 'admin/<module>/<controller>/<action>' 
      ], 
     ], 

管理工作正常,這是我的第一個模塊,這樣的規則,其餘的都已經提到

+0

您是否有其他規則?向我們展示您的urlManager配置。 – soju

+0

您是否嘗試將正則表達式從[\ w - ] +更改爲其他內容。例如。 \ w +或者只是使用而沒有任何表達。 – Hanafi

+0

@soju看到我更新的問題 –

回答

0

也只是幫助其他傢伙我有使用以下方法檢索$別名的值:

$alias = \Yii::$app->request->get('alias'); 

但絕對不是這個問題的準確答案。我仍然不知道我做錯了什麼,我沒有使用問題中提到的方法獲得價值。

0

它wirk! [

   'name' => 'lang_country_seller_catalog', 
       'pattern' => '<lang:\w+>-<country:\w+>/seller/catalog/<module>/<controller>/<action>', 
       'route' => 'seller/catalog/<module>/<controller>/<action>', 
      ], 
[ 
       'name' => 'lang_country_seller_catalog_attributes', 
       'pattern' => '<lang:\w+>-<country:\w+>/seller/catalog/attributes/<module>', 
       'route' => 'seller/catalog/attributes/<module>', 

      ],