我想在模型中设置字段的值。字段(源)位于数据库中,但在表单上没有用于捕获数据的字段。我想设置字段的值而不创建隐藏的表单字段。这可能吗?
谢谢!
//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并将此值放入数据库而不通过表单?
答案 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)