2010-11-28 4 views
2

Symfony 1.4 및 Doctrine을 사용하고 있습니다. 이름, 부모 1, 부모 2, 부모 3, 부모 4, 부모 5 양식이 제출되면 두 가지에 대해 데이터베이스를 확인하고 싶습니다. 1. 이름 필드는 고유합니다 2. 그 parent1, parent2, parent3, parent4 및 parent5의 조합은 데이터베이스에 아직 없습니다. 이 값은 모두 정수 (관련 테이블의 기본 키)이며, 일부 필드는 0으로 비어 있습니다. 사용자가 입력 한 순서에 따라 데이터베이스로 이동하기 때문에 순서는 신경 쓰지 않지만 양식이 저장되기 전에 조합 자체가 존재하지 않는지 확인하고 싶습니다.Symfony 1.4 저장하기 전에 데이터베이스 항목에 대한 양식 값 확인

도움이 될 것입니다.

답변

4

sfValidatorCallback을 사용하십시오. 양식 클래스에서 설정에서 다음을 추가() 함수 : 다음

$this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'YOURCALLBACKFUNCTIONNAME')))); 

, 당신은 동일한 파일에이를 만들 수 있습니다, 콜백 기능 :

public function YOURCALLBACKFUNCTIONNAME($validator, $values) { 
    //Validate form here 
    //Access form items using $values['FORMNAME']; 
    //$error = new sfValidatorError($validator, 'A Error Message.'); 
    //$es = new sfValidatorErrorSchema($validator, array('FORMITEM' => $error); 
    //throw $es; 
    } 
+0

와우 - 며칠 동안이 작업을 해왔습니다. 너무 고마워 Jon, 이제 시작이야! – Lauren

+0

np, 다행 이군. – jgallant

2

실제로 교리가있다 이것에 대한 validator 인 sfValidatorDoctrineUnique. 양식에, 시도 :

public function configure() 
{ 
    parent::configure(); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('name') 
))); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('parent1', 'parent2', 'parent3', 'parent4', 'parent5') 
))); 
} 
+0

감사합니다. Jeremy - 이름에 잘 작동하지만 부모 열에 오류가 발생하지 않습니다. 동일한 순서로 입력하더라도 db 항목이 중복됩니다. – Lauren

+0

내가 생성하는 쿼리를 살펴보고 잘못된 점을 확인하는 것이 좋습니다. 유효성 검사기에는 거의 문제가 없습니다. –

0

나는 귀하의 질문에 교리에 대한 것을 알고 있지만,이 대답을 찾고 Proepl을 사용되어 사람들을 위해,이에 대한 추진 검사기가 :

또 다른 유용한 모델 관련 유효성 검사기는 폼을 통해 입력 된 새 값이 고유 인덱스가있는 데이터베이스 열의 기존 값과 충돌하지 않는지 확인하는 sfValidatorPropelUnique 유효성 검사기입니다. 형태와 사용자 객체를 편집 할 때 예를 들어, 두 사용자가 동일한 로그인을 할 수 없으므로,이 칼럼에 sfValidatorPropelUnique 유효성 검사기를 추가해야합니다

// 펠 고유의 검증 $ 형상 -> setValidator ('별명을 ', new sfValidatorPropelUnique (array ('model '=>'사용자 ','열 '=> '로그인 '))));

관련 문제