1

我有一个表单,提交后,我可以使用以下方式查看表单值: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.

有什么线索吗?

4

3 回答 3

3

在验证之前初始化表单的操作中(通常在创建或更新函数中),只需将一个空对象传递给表单,该对象的值已设置为任意要添加的值。

让我们将您的表单称为 myModelForm 并将您的模型称为 myModel。

在动作中(在 processForm 之前)

$obj = new myModel();
$obj->setCatList(array(99));
$this->form = new myModelForm($obj);

这应该工作

于 2012-08-11T21:35:02.437 回答
0

您应该doUpdateObject以 cals 的形式覆盖函数。

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()在行动中打电话。

于 2012-08-06T20:49:20.353 回答
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();

99顺便说一句,如果您从@1ed 中选择解决方案,您应该使用外部参数来定义您的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)
  }
}
于 2012-08-07T07:25:30.333 回答