I am going through an issue to setup a file upload validator on callback.
I want to achieve this:
I have a form, where user choose the type of the file they are uploading and upload the file. So I want to set the validator to handle images in case they chose "img" as type, and pdf if they chose "pdf".
Moreover I want to specify the mime type and path and validatedFileClass according to the type.
I tried this.. but i can t get it to work
$this->validatorSchema->setPostValidator(
new sfValidatorCallback(array( callback => array($this, validateUploadedFiles )))
);
the function:
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;
}
the problem i am facing is that , this function receives the url value as array, and even if I update the validators schema, it s not validating the url and keeps on sending it as array to the object saving method. So how to make something like
url.validateFile() from inside this function