2013-04-22 134 views
1

我有一個像URL與Yii框架重寫

www.example.com/food/xyz 
本人已在main.php(config文件夾)這樣寫的規則

一個url

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'caseSensitive'=>false, 
    'rules'=>array(
     '/food/<name:\w+>/' => 'food/index/', 
     '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
    ), 
), 

這意味着,在內部「 xyz「將作爲參數傳遞給我的FoodController的actionIndex根據規則

class FoodController extends Controller 
{ 
    public function actionIndex($name){ 
     //some code here 
    } 

    public function actionItems(){ 
     //some code here 
    } 
} 

問題我是fac ING是,我在同一個班叫actionItems另一種方法,當我使用的URL

www.example.com/food/items 

它調用的actionIndex和通行證「項目」作爲參數

如何解決這個任何想法?

在此先感謝。

回答

2

你的第一條應該是項目

'/food/items'=>'food/items', 
'/food/<name:\w+>/' => 'food/index/', 

另外,我寧願使用別名來分割使用的控制器,使得全部'food'/ <:name>'網址與'/ food/action'網址區分,例如:

'/food/<name:\w+>/' => 'food/index/', 
'/foods/<action:\w+>' => 'food/<action>' 
+0

嘿克里斯..謝謝!這是我猜想得到它的唯一方法。 – Rohit 2013-04-23 08:11:18

0

試試這個,只是改變順序:

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'caseSensitive'=>false, 
    'rules'=>array(
     '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
     '/food/<name:\w+>/' => 'food/index/' 
    ), 
), 
+0

Thanks for t他迅速回復。儘管在最後使用規則,但仍然有相同的問題。 – Rohit 2013-04-22 17:48:45

+0

@Rohit這應該做你想做的。您只需刪除尾部的斜線。如果沒有,那麼也許你必須更新你的問題,並給出一個例子列表,顯示哪些URL應該發送到哪個操作。 – 2013-04-23 06:51:38