2010-01-19 2 views
2

콜백시 파일 업로드 유효성 검사기를 설정하는 데 문제가 있습니다.sfValidatorFile을 사용하는 symfony setPostValidator

나는 이것을 달성 할 :

나는 사용자가 업로드하는 파일의 종류를 선택하고 파일을 업로드 한 형태를 가지고있다. 그래서 형식으로 "img"를 선택한 경우에 이미지를 처리하기 위해 유효성 검사기를 설정하고 "pdf"를 선택한 경우 pdf로 설정하려고합니다.

또한 유형에 따라 MIME 유형과 경로 및 validatedFileClass를 지정하려고합니다.

나는이 시도 ...하지만 난 그것을

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

에게 기능을 작동시킬 수 없습니다

이 기능은 URL을 수신
 public function validateUploadedFiles($form_validator, $values){ 

    $this_year = date("Y"); 
    $this_month = date("m"); 

    $basic_validator = array(
    'required' => true, 
    'path' => sfConfig::get('sf_upload_dir').'restaurant/media/'.$this_year.'/'.$this_month.'/' 
    ); 

    $doc_validator = $video_validator = $img_validator = $pdf_validator = $basic_validator; 
    $pdf_validator['mime_types'] = array ('application/pdf'); 
    $doc_validator['mime_types'] = array ('application/msword', 'application/vnd.openxmlformats'); 
    $img_validator['mime_types'] = 'web_images'; 
    //$img_validator['validated_file_class'] = 'imgHandling'; 
    $video_validator['mime_types'] = array('video/mpeg', 'video/3gpp', 'video/mp4', 'video/quicktime'); 

    switch($values['type']): 
     case 'pdf' : $validator = $pdf_validator; break; 
     case 'img' : $validator = $img_validator; break; 
     case 'word' : $validator = $doc_validator; break; 
     case 'video' : $validator = $video_validator; break; 
    endswitch; 


    //$form->getValidatorSchema()->offsetUnset('url') ; 
    //print_r($validator_fields); 
    $validator = new sfValidatorFile($validator); 
    $validator_schema = new sfValidatorSchema(); 
    $validator_schema->offsetSet('url', $validator); 
    //$validator_fields = $form->getValidatorSchema()->getFields();  


    $schema = parent::getValidatorSchema(); 
    $schema->offsetUnset('url') ; 
    $schema->offsetSet('url', $validator); 


    // $path = sfConfig::get('sf_upload_dir').'restaurant/media/'.$this_year.'/'.$this_month.'/'; 
    // $values['url'] = new sfValidatedFile($values['url']['name'], $values['url']['type'], $values['url']['tmp_name'], $values['url']['size'] , $path); 

    //TODO get this url value run through the new added validator 
    //$values['url'] = $validator_schema->clean(array('url' => $values['url'])); 

    return $values; 

    } 

내가 직면하고있는 문제가 있음 값을 배열로 가져오고 유효성 검사기 스키마를 업데이트하더라도 url의 유효성을 검사하지 않고 객체 저장 메서드에 배열로 전송합니다. 그래서 최선의 해결책에 대한

답변

2

확실하지 않음이 함수 내부에서

url.validateFile() 같은 것을 만드는,하지만 난 두 부분으로 검증 프로세스를 분할 원합니다 방법 :

  1. MIME 타입
  2. 마임가 정상이라면 유효성을 검사 한 후 URL을

또는 바이스 반대, 당신의 선택을 확인합니다.

접착제는 sfValidatorAnd입니다.

내가 올바르게 이해 했습니까?