我已经在这几天苦苦挣扎,但却无法得出答案。我需要在初次提交后更改表单值。将使用提交的值之一从外部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版本。
感谢。
伊万
答案 0 :(得分:1)
确定..找到答案...需要在回调验证器中使用taintedValues ..才能抛出错误..
public function validate_requester_id($validator, $values){
...
$this->taintedValues['fieldname'] = NEW VALUE
...
}