如何在保存之前更改Symfony表单数组值?

时间:2012-08-06 20:34:21

标签: php symfony1 symfony-1.4

我有一个表单,提交后,我可以使用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.

任何线索?

3 个答案:

答案 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)
  }
}