2010-01-19 43 views
2

我正在經歷一個問題,在回調中設置文件上傳驗證程序。symfony setPostValidator與sfValidatorFile

我要實現這一點:

我有一個表格,其中用戶選擇他們上載的文件類型和上傳文件。 所以我想設置驗證器來處理圖像,以防他們選擇「img」作爲類型,如果選擇「pdf」則使用pdf。

此外我想根據類型指定MIME類型和路徑以及validatedFileClass。

我嘗試這樣做..但我無法得到它的工作

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

功能:

 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

我理解你的意思嗎?