2012-03-16 15 views
0

私はこれを数日間苦労していて、答えを思い付くことができませんでした。私は最初の提出の後にフォーム値を変更する必要があります。この値は、送信された値の1つを使用して外部Webサービスから取得されます。検索に使用される値は、有効なIDであることを確認するためにWebサービスで検証される個人IDです。この情報で、Webサービスは完全な名前を返し、フォームに戻す必要があるため、ユーザーは期待されていると確信し、このフルネームも他の値とともに保存されます。symfony - フォームコールバック検証ツールでフォームの値を変更

私はすでにこのアプローチを見て、私はこれでアクションから、フォームの値を変更することができる午前: 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') 
    ... 
    } 
} 

がなくバック形態で$値[「person_fullname」]に割り当てられた値は

を変更していないとき

後で、requester_id ..のonchangeイベントの後にwebserviceを呼び出すajaxによってfullname値を更新しますが、最初にnonajaxバージョンを使用するようにしたいと考えています。

ありがとうございました。

イワン

+0

をコールバックバリデータ内taintedValuesを使用するための答え...必要性を発見しました。 'あなたのコールバックの終わりにステートメント? – Maerlyn

答えて

1

okが..あなたが `返す$の値を持っています。..エラーをスローする前に...

public function validate_requester_id($validator, $values){ 
    ... 
    $this->taintedValues['fieldname'] = NEW VALUE 
    ... 
} 
関連する問題