Symfony:允许多个mime类型


Symfony: Allow multiple mime-types

我正在尝试允许在我的文件上传中包含多个mime类型。我试过这样的东西:

$this->validatorSchema['filename'] = new sfValidatorFile(array(
  'required'        => false, 
  'path'            => sfConfig::get('sf_upload_dir'),
  'mime_categories' => array(
    'application' => array(
      'application/pdf'
    ),
    'web_images'  => array(
      'image/jpeg',
      'image/pjpeg',
      'image/png',
      'image/x-png',
      'image/gif',
    )
  ),
  'mime_types' => array('application', 'web_images')
));

我不想在上传中包含所有类型的mime类型,也不想将类别/类型合并到一个数组中。以前有人面对过这种情况吗?或者知道为什么会发生这种情况?

来自sfValidatorFile.class.php

$mimeTypes = is_array($this->getOption('mime_types')) ? $this->getOption('mime_types') : $this->getMimeTypesFromCategory($this->getOption('mime_types'));

它似乎在接受数组,似乎我做得对。我是不是遗漏了什么?

sfValidatorFile文档显示:

mime_types: Allowed mime types array or category (available categories: web_images)

(sfValidatorFile.php,第27行)。它允许mime类型数组OR(one)类别(而不是类别数组)。这就是您的代码无法工作的原因。

你在错误的地方混合了很多东西。保持简单。您可以为所需的每种mime_type指定一个参数mime_types

例如,在这里我接受所有类型的图像或pdf:

$mime_types = array(
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/gif',
    'application/pdf',
);
$this->validatorSchema['filename'] = new sfValidatorFile(array(
    'mime_types' => $mime_types
), array(
    'invalid'    => 'Invalid file.',
    'required'   => 'Select a file to upload.',
    'mime_types' => 'The file type is incorrect.'
));

编辑:

好吧,我明白你想要什么了。您的代码几乎是正确的,但关于mime_types检查是如何完成的,如果您给出一个数组,则意味着它是一个mime_type数组,而不是一个类别数组。如果你没有给出一个数组,那就意味着它是一个mime类别。

这听起来像是symfony中的一个bug,但您应该给出一个合并数组,然后将其传递给mime_types选项。