Yii,在不使用隐藏字段的情况下设置模型值

时间:2012-07-12 11:00:28

标签: php yii

我想在模型中设置字段的值。字段(源)位于数据库中,但在表单上没有用于捕获数据的字段。我想设置字段的值而不创建隐藏的表单字段。这可能吗?

谢谢!

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

然后提交表单,当然$ source不在_POST中,因为没有字段来捕获$ source

但是我设置了$ model-> source的值,但是这个值似乎没有持续存在,因为它没有保存在数据库中。

解决这个问题的唯一方法就是使用隐藏字段并将$ source的值传递给表单。

有没有办法设置$ model-> source并将此值放入数据库而不通过表单?

4 个答案:

答案 0 :(得分:1)

如果您需要在显示表单时设置$source的值(因为例如,当您掌握所需数据时),则创建一个隐藏的输入控件。这没什么不对的;您希望在模型中保留非默认值,并且隐藏的输入元素是实现此目的的方法。

答案 1 :(得分: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,
        ));
    }

答案 2 :(得分:0)

在模型类的规则函数中执行类似的操作:

public function rules() {

    return array(
        .
        .
        .
        array('source', 'default', 'value' => 'hello'),
    );
}

答案 3 :(得分:0)