1

私は Yii を使用しており、名前付きのコントローラーとUserCRUD 操作用のいくつかのアクションがあります。次のように新しいアクションを追加しました。

public function actionEmbedded($field, $action, $id){
    /* code */
}

このアクションにアクセスするには、URL は

/user/embedded/field/logins/action/view/id/5542ab0cb0db0ab000000001

しかし、これは を返します404 Not found error

ただし、パラメーターの1つを$_id代わりに変更すると$id...

public function actionEmbedded($field, $action, $_id){
    /* code */
}

...期待どおりにアクションにアクセスできます

/user/embedded/field/logins/action/view/_id/5542ab0cb0db0ab000000001

理由はありますか?パラメータ名は予約されていますか? $idそれがこの動作の理由である可能性がある場合は、他のアクションで を使用します。

更新: config.php ファイルの urlManager-code は次のとおりです。

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=> false,
        'rules'=>array(
            // Handles differen API versions
            'api/1.0/<action:\w+>/*' => 'api_1_0_/<action>',
            array('api_1_1_/<action>', 'pattern'=>'api/1.1/<action:\w+>', 'verb' => 'GET'),
            //array('api_1_1_/Post<action>', 'pattern'=>'api/1.1/<action:\w+>/*', 'verb' => 'POST'),

            // User specific API calls (starts with users/me)
            array('api_1_1_/prices', 'pattern'=>'api/1.1/prices/<market:\w+>/<biddingArea:\w+>/hour/<period:\w+>', 'verb' => 'GET'),
            array('api_1_1_/view/model/users/id/me', 'pattern'=>'api/1.1/users/me', 'verb' => 'GET'),
            array('api_1_1_/listEmbeddedArray/model/users/id/me/array/contracts', 'pattern'=>'api/1.1/users/me/meters', 'verb' => 'GET'),
            array('api_1_1_/view/model/units/id/<id>', 'pattern'=>'api/1.1/users/me/meters/<id:\w+>', 'verb' => 'GET'),
            //array('api_1_1_/viewEmbeddedArray/model/users/id/me/array/contracts/ean/<ean>', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>', 'verb' => 'GET'),
            //array('api_1_1_/series', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>/series/<query:\w+>', 'verb' => 'GET'),
            //array('api_1_1_/series/source/<source>/ean/<ean>/resolution/<resolution>/query<query>', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>/series/<resolution:\w+>/<query:\w+>', 'verb' => 'GET'),
            //array('api_1_1_/view/model/unit/id/<id>', 'pattern'=>'api/1.1/users/me/meters/<id:\w+>', 'verb' => 'GET'),
            array('api_1_1_/series/id/<id>', 'pattern'=>'api/1.1/users/me/series/<id:\w+>', 'verb' => 'GET'),

            array('api_1_1_/list', 'pattern'=>'api/1.1/users/me/<model:\w+>', 'verb' => 'GET'),
            array('api_1_1_/view', 'pattern'=>'api/1.1/users/me/<model:\w+>/<id:\w+>', 'verb' => 'GET'),
            array('api_1_1_/delete', 'pattern'=>'api/1.1/users/me/<model:\w+>/<id:\w+>', 'verb' => 'DELETE'),

            // General API calls
            array('api_1_1_/download', 'pattern'=>'api/1.1/download/<model:\w+>', 'verb' => 'GET'),
            array('api_1_1_/series', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/series', 'verb' => 'GET'),

            array('api_1_1_/listEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>', 'verb' => 'GET'),
            array('api_1_1_/updateEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'PUT'),
            array('api_1_1_/deleteEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'DELETE'),
            array('api_1_1_/viewEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'GET'),
            array('api_1_1_/createEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>', 'verb' => 'POST'),

            array('api_1_1_/list', 'pattern'=>'api/1.1/<model:\w+>', 'verb' => 'GET'),

            array('api_1_1_/view', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'GET'),
            array('api_1_1_/update', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'PUT'),
            array('api_1_1_/delete', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'DELETE'),
            array('api_1_1_/create', 'pattern'=>'api/1.1/<model:\w+>', 'verb' => 'POST'),

        ),
    ),
4

1 に答える 1

1

コメントできないので、そうでなくても回答として投稿します。urlManager ルールを確認してください。おそらく、urlManager ルールにリクエストが適合するパターンがあり、フレームワークがそれを実行しようとします。私の記憶が正しければ、view のデフォルト ルールはパラメータを想定しているため、設定のようなルールが原因で、アプリケーションが存在しない$idを呼び出そうとする場合としない場合があります。userController::actionView($id)'<controller:\w+>/<id:\d+>'=>'<controller>/view'

しかし、これは推測にすぎません。デバッグを有効にして、アプリケーションがどこに行こうとしているのかを確認することをお勧めします。おそらく、urlManager 構成でビュー ルールを controller/view ではなく module/controller/view に変更することで、これを修正できます。

乾杯。

于 2013-10-17T18:31:32.977 に答える