我有一个像
的网址www.example.com/food/xyz
我在main.php(配置文件夹)中编写了这样的规则
'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
}
}
我面临的问题是我在同一个类中有另一个名为actionItems的方法,当我使用URL时
www.example.com/food/items
它调用actionIndex并将“items”作为参数传递
关于如何解决这个问题的任何想法?
提前致谢。
答案 0 :(得分:2)
您的第一条规则应该是项目
'/food/items'=>'food/items',
'/food/<name:\w+>/' => 'food/index/',
或者,我宁愿使用别名来分割控制器的使用,以便所有'food'/&lt;:name&gt;'网址与“/ food / action”网址区别开来,例如:
'/food/<name:\w+>/' => 'food/index/',
'/foods/<action:\w+>' => 'food/<action>'
答案 1 :(得分: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/'
),
),