我有一个表单,提交后,我可以使用var_dump($this->form->getValues();
查看表单值。我的一个表单值(来自多选小部件)是:
["cat_list"]=>
array(1) {
[0]=>
string(1) "1"
}
我希望在保存表单之前将值附加到此数组。我该怎么做呢?我以为我能做到这一点:
$values = $this->form->getValues();
array_push($values['cat_list'], '99'); // <--- 99 is the number I want to append
$this->form->setCatList($values['cat_list']);
$this->form->save();
但这不起作用:
Call to undefined method FrontendOfferForm::setCatList.
任何线索?
答案 0 :(得分:3)
在验证之前初始化表单的操作中(通常在create或update函数中),只需向表单传递一个空对象,其中包含您想要任意添加的值。
让我们调用你的表单myModelForm和你的模型myModel。
在动作中(在processForm之前)
$obj = new myModel();
$obj->setCatList(array(99));
$this->form = new myModelForm($obj);
这应该有效
答案 1 :(得分:0)
您应该以calss形式覆盖doUpdateObject
函数。
protected function doUpdateObject($values)
{
parent::doUpdateObject($values);
if (isset($values['cat_list']))
{
$carList = is_array($values['cat_list']) ? $values['cat_list'] : array($values['cat_list']);
array_push($catList, 99);
$this->getObject()->setCatList($catList)
}
}
就是这样。您应该只在操作中调用$this->form->save()
。
答案 2 :(得分:0)
你应该有另一种方法而不是来自@ 1ed的方法。
保存表单时,它返回对象。因此,您必须先保存表单,然后更新cat_list
:
$values = $this->form->getValues();
$object = $this->form->save();
array_push($values['cat_list'], '99'); // <--- 99 is the number I want to append
$object->setCatList($values['cat_list']);
$object->save();
顺便说一句,如果您从@ 1ed中选择解决方案,则应使用外部参数来定义99
,如果您希望能够使用99
之外的其他内容。
像:
$this->form->catListExtraValue = 99;
$this->form->save();
然后:
public $catListExtraValue = null;
protected function doUpdateObject($values)
{
parent::doUpdateObject($values);
if (isset($values['cat_list']) && null !== $this->catListExtraValue)
{
$carList = is_array($values['cat_list']) ? $values['cat_list'] : array($values['cat_list']);
array_push($catList, $this->catListExtraValue);
$this->getObject()->setCatList($catList)
}
}