1

Symfony 1.4 のフォームで、埋め込みフォームのポストバリデーターで sfValidatorError をスローするにはどうすればよいですか?

私の親フォームは以下を呼び出します:

public function configure(){
    $this->embedForm('page', $pageLinkForm);
}

そして私の埋め込みフォーム:

public function configure(){
    $this->validatorSchema->setPostValidator(new sfValidatorCallback(array(
        'callback' => array($this, 'validateLink')
    )));
}

public function validateLink($validator, $values) {
    if (!empty($values['link']) && !empty($values['outside_link']))
        throw new sfValidatorError($validator, 'Only specify either an internal link or an external link, but not both.');

}

ポスト バリデーターは、sfValidatorError をスローする validateLink を実行しますが、グローバル エラーおよびフォーム isValid() として表示されませんが、そうであってはなりません。

エラーが無視されるのはなぜですか? 無視されないようにするにはどうすればよいですか?

4

2 に答える 2

2

私見ですが、次のように sfValidatorSchemaError をスローする方が良いでしょう:

$error =  new sfValidatorError($validator, 'invalid', array('value' => $field_name));
throw new sfValidatorErrorSchema($validator, array($field_name => $error));

埋め込みフォーム内でエラーをスローしたい場合は、 sfValidatorSchemaError を埋め込むだけです:

//define container
$errorSchema =  new sfValidatorErrorSchema($validator);

//embedded field error
$error =  new sfValidatorError($validator, 'invalid', array('value' => $field_name));
$errorSchema->addError($error, $field_name);

//associate $errorSchema to your embedded field
throw new sfValidatorErrorSchema($validator, array('page' => $errorSchema));
于 2011-08-23T15:20:46.180 に答える
0

sf1.1では次のようにします。

 public function bind(array $taintedValues = null, array $taintedFiles = null)
 {
   sfLoader::loadHelpers(array('I18N'));
   parent::bind($taintedValues, $taintedFiles);
   if($taintedValues["password"])
   {
     if(!$taintedValues["pwd_verify"])
     {
       $this->getErrorSchema()->addError(new sfValidatorError(new sfValidatorSchema(), __('Please reenter the new password.')), 'password');
     }
   }
 }

お役に立てば幸いです。

于 2010-08-23T19:21:49.473 に答える