9

在 Symfony 中,我可以使用以下方式接受 MIME 类型:

/**
  * @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
  */
public $file;

但是我怎样才能从那个列表中排除一些东西呢?比方说,我想允许除 PHP 文件之外的所有上传?

4

2 回答 2

6

您可以通过断言实现回调约束。此方法的一个优点是您可以将错误消息应用于表单中的任何字段(或多个字段)。

use Symfony\Component\Validator\ExecutionContext;

/**
 * @ORM\Entity()
 * @Assert\Callback(methods={"validateFile"})
 */
class MyEntity
{

    public function validateFile(ExecutionContext $context)
    {
        $path = $context->getPropertyPath();
        if (/* $this->file is not in allowed mimeTypes ... */) {
            $context->setPropertyPath($path . '.file');
            $context->addViolation("Invalid file mimetype", array(), null);
        }
    }
}
于 2012-12-26T18:38:28.177 回答
6

您无需创建任何回调即可执行此操作。只要确保:

1) 在您的 app/config/config.yml 中将 enable_annotations 参数设置为 true:

# app/config/config.yml
framework:
    validation:      { enable_annotations: true }

2)在您的实体文件中正确包含验证约束。

// YourEntity.php
use Symfony\Component\Validator\Constraints as Assert;

3)正确使用注释。例子:

// YourEntity.php
/**
 * @Assert\File(
 *      maxSize="5242880",
 *      mimeTypes = {
 *          "image/png",
 *          "image/jpeg",
 *          "image/jpg",
 *          "image/gif",
 *          "application/pdf",
 *          "application/x-pdf"
 *      }
 * )
 */
 private $arquivo;

上面的代码在我的 Symfony 2.3.9 上运行良好。

[]s

于 2014-01-17T17:01:33.217 回答