1

私は次のようなURLを持っています

www.example.com/food/xyz

このようなルールを main.php (config フォルダー) に記述しました。

'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 に答える