-2

AJAX を介してモデルを更新するためにこのメソッドをセットアップし、存在しない場合は新しいモデルも作成して拡張しようとしました。

public function actionAjaxUpdate($id = null)
{
    if($id === null)
        $model = new MyObject;
    else
        $model = $this->loadModel($id);

    if(isset($_POST['MyObject']))
    {
        $model->attributes = $_POST['MyObject'];
        $model->save();
    }
}

AJAX 経由で更新するときに送信される URL の例。末尾の数字はモデル ID です。

/admin/myObject/ajaxUpdate/1
/admin/myObject/ajaxUpdate/2
/admin/myObject/ajaxUpdate/3
...

ここでの問題は、ID が提供されているため、更新は正常に機能しますが、新しいモデルの作成が機能しないことです。新しいアイテムの ID がまだ存在しないため、URL ルートは 404 を返します。

要求された URL /cmsadmin/myObject/ajaxUpdate がこのサーバーで見つかりませんでした。

この問題を解決するための良いアプローチは何でしょうか?

パラメータなしで同じメソッドをオーバーロードしようとし$idましたが、このスレッドで説明されているように、PHP はオーバーロードをサポートしていません: Yii フレームワークのモデルでのメソッドのオーバーロード

追加情報が必要な場合は、コメントを残してください。

==== 追加情報 ====

main.php

<?php
$backend = dirname(dirname(__FILE__));
$frontend = dirname($backend);
Yii::setPathOfAlias('admin', $backend);

return array(
    'basePath' => $frontend,
    'controllerPath' => $backend . '/controllers',
    'viewPath' => $backend . '/views',
    'runtimePath' => $backend . '/runtime',

    'components' => array(
        'urlManager' => array(
            'urlFormat' => 'path',
            'showScriptName' => false,
            'caseSensitive' => false,
            'appendParams' => true,
            'rules' => array(
                'admin/<controller:\w+>/<action:\w+>/<id:\d+>'=>'/<controller>/<action>',
                'admin/<controller:\w+>/<action:\w+>'=>'/<controller>/<action>',
...
4

2 に答える 2

2

私は同じ問題を抱えていましたがid=0、挿入とid=1更新のために渡されました。idフィールドが自動インクリメントに設定されていることを確認してください。これは必須ではありません。

ここで、idが1であるかどうかを確認してから、挿入するか、レコードを更新します。

于 2012-12-10T04:29:16.783 に答える
1

Bonifaceが提案したように、IDとして0を渡すことができますが、関数を次のように変更する必要があります

if($id == 0)

このように id として 0 を渡すと、それを検出して新しいオブジェクトを作成します。

または、何も渡さない (または 0) だけを使用することもできます

if(!$id) {
    $model = new MyObject;
于 2012-12-10T04:37:31.463 に答える