2010-08-17 8 views
1

에서 오류를 throw하는 방법 Symfony 1.4의 Forms에서 임베디드 폼의 유효성 검사기에 sfValidatorError를 던지려면 어떻게해야합니까?임베디드 양식의 유효성 검사기 (sfForm)

내 부모 폼 호출 다음

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() 형식이어야하지만 그렇지 않아야합니다.

왜 오류가 무시됩니까? 내가 어떻게 그것을 무시하지 않을 수 있습니까? sf1.1에서

+0

이 파일을 debbuging 시도 : http://trac.symfony-project.org/browser/branches/1.4/lib/validator/sfValidatorSchema.class.php (가능한 경우 XDebug를 사용하여 단계별 디버깅을 수행하고 그렇지 않으면 var_dump()를 사용하여 확인) : - 오류 sfValidatorError는 caugh입니다. t 줄을 삽입하는 동안 게시 - 결과로 나타나는 errorSchema가 199 행에 던졌습니다.의 줄 159에서 다시 캐치됩니다. 부모 양식의 validatorSchema의 var_dump()를 게시하십시오. – greg0ire

답변

0

나는 이런 식으로 작업을 수행합니다

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'); 
    } 
    } 
} 

내가 당신을 도움이되기를 바랍니다. sfValidatorSchemaError

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

을 그리고 당신은 내장 된 형태로 내부 오류가 발생 할 경우, 단지 포함 :

2

이럴 그것은이처럼 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));