使用Yii框架重写URL

时间:2013-04-22 17:20:08

标签: php url-rewriting yii

我有一个像

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

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

提前致谢。

2 个答案:

答案 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/'
    ),
),