3

モデルにフィールドの値を設定したい。フィールド (ソース) はデータベースにありますが、データを取得するためのフィールドがフォームにありません。非表示のフォーム フィールドを作成せずにフィールドに値を設定したい。それは可能ですか?

ありがとう!

//in controller
public function actionTest()
                {
        $model=new TestForm();
        $src = 'hello';  
        $model->source($src);
        echo $model->source; // hello
        $this->render('_form',array('model'=>$model));    
                }  

次にフォームが送信されますが、$source をキャプチャするフィールドがないため、もちろん $source は _POST にはありません。

ただし、 $model->source の値を設定しましたが、データベースに保存されていないため、この値は持続しないようです。

これを解決する唯一の方法は、隠しフィールドを使用して $source の値をフォームに渡すことです。

$model->source を設定し、この値をフォームを経由せずにデータベースに入れる方法はありますか?

4

4 に答える 4

1

$sourceフォームを表示するときにの値を設定する必要がある場合(必要なデータが手元にある場合など)、非表示の入力コントロールを作成します。それについて何も悪いことはありません。モデルにデフォルト以外の値を保持したい場合、非表示の入力要素がその方法です。

于 2012-07-12T11:53:36.563 に答える
0

モデル クラスのルール関数で次のようにします。

public function rules() {

    return array(
        .
        .
        .
        array('source', 'default', 'value' => 'hello'),
    );
}
于 2013-01-07T23:57:51.377 に答える
0

フォームはどこかに投稿する必要があり、Yii では同じページに投稿することをお勧めします。

私はこのようにします:

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['NotificationLog']))
        {
            $model->attributes=$_POST['NotificationLog'];
            if($model->save())
                $this->redirect(array('admin'));
        } else {
                  // set defaults
                  $model->source = 'hello';
            }

        $this->render('update',array(
            'model'=>$model,
        ));
    }
于 2012-07-12T11:48:55.537 に答える
0

クラスで beforeSave を使用します。http://www.yiiframework.com/doc/blog/1.1/en/post.create#customizing-x-9x-and-x-11x-operationsを参照してください

于 2013-02-05T10:06:33.083 に答える