2013-04-22 212 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