symfony - 在表单callbackvalidator中更改表单值

时间:2012-03-16 16:14:15

标签: validation symfony1 callback symfony-forms

我已经在这几天苦苦挣扎,但却无法得出答案。我需要在初次提交后更改表单值。将使用提交的值之一从外部Web服务检索该值。用于搜索的值是使用Web服务验证的人员ID,以确保它是有效的ID。使用此信息,Web服务返回全名,我需要在表单中显示它,以便用户确定它是预期的人,此全名也与其他值一起保存。

我已经看到了这种方法,我可以使用以下方法更改操作中的表单值: http://www.thenameiskhan.com/binding-changed-form-values-symfony

$values = $request->getParameter($form->getName());
$values['yourdate'] = NEW MODIFIED DATE VALUE;
$form->bind($values, $request->getFiles($form->getName()));

但我试图通过sf ValidatorCallback函数中的表单类来完成此操作,该函数验证提供的id并检索全名..

public function validate_requester_id($validator, $values){

  .....
  $webserviceanswer = CALLWEBSERVICE($values['person_id'])
  if ($webserviceanswer['code'] == VALID){
    $values['person_fullname'] = $webserviceanswer['fullname'];
  }
if( notvalid or first submit){
  ...// so as to display fullname to user.....
  throw new sfValidatorError($validator, 'blablabla')
  ...
  }
}

但是当返回格式时,分配给$ values ['person_fullname']的值不会更改

稍后我还将通过在requestter_id的onchange事件之后调用webservice的ajax来更新fullname值,但是希望首先使用fallback nonajax版本。

感谢。

伊万

1 个答案:

答案 0 :(得分:1)

确定..找到答案...需要在回调验证器中使用taintedValues ..才能抛出错误..

public function validate_requester_id($validator, $values){
  ...
  $this->taintedValues['fieldname'] = NEW VALUE
  ... 
}