1

我有一个像

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”作为参数传递

关于如何解决这个问题的任何想法?

提前致谢。

4

2 回答 2

2

你的第一条规则应该是物品

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

或者,我宁愿使用别名来拆分控制器的使用,以便所有 'food'/<:name>' url 都与 '/food/action' url 区分开来,例如:

'/food/<name:\w+>/' => 'food/index/',
'/foods/<action:\w+>' => 'food/<action>'
于 2013-04-23T07:11:48.990 回答
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/'
    ),
),
于 2013-04-22T17:45:48.210 回答