Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 带有SFValidator文件的symfony setPostValidator_File Upload_Symfony1_Propel - Fatal编程技术网

File upload 带有SFValidator文件的symfony setPostValidator

File upload 带有SFValidator文件的symfony setPostValidator,file-upload,symfony1,propel,File Upload,Symfony1,Propel,我正在经历一个问题,设置一个文件上传验证回调 我想做到这一点: 我有一个表单,用户可以选择他们上传的文件类型,然后上传文件。 所以我想设置验证器来处理图像,以防他们选择“img”作为类型,如果他们选择“pdf”,则处理pdf 此外,我想根据类型指定mime类型和路径以及validatedFileClass 我试过这个。。但我不能让它工作 $this->validatorSchema->setPostValidator( 新的sfValidatorCallback(数组('callback'=>a

我正在经历一个问题,设置一个文件上传验证回调

我想做到这一点:

我有一个表单,用户可以选择他们上传的文件类型,然后上传文件。 所以我想设置验证器来处理图像,以防他们选择“img”作为类型,如果他们选择“pdf”,则处理pdf

此外,我想根据类型指定mime类型和路径以及validatedFileClass

我试过这个。。但我不能让它工作

$this->validatorSchema->setPostValidator(
新的sfValidatorCallback(数组('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值,即使我更新了validators模式,它也不会验证url,而是继续以数组的形式发送给对象保存方法。 那么如何制作类似于


url.validateFile()从该函数内部执行

不确定最佳解决方案,但我更愿意将验证过程分为两部分:

  • 验证mime类型
  • 如果mime正常,则验证URL
  • 反之亦然,由你选择

    胶水应该是

    我对你的理解对吗