在 Symfony 中,我可以使用以下方式接受 MIME 类型:
/**
* @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
*/
public $file;
但是我怎样才能从那个列表中排除一些东西呢?比方说,我想允许除 PHP 文件之外的所有上传?
在 Symfony 中,我可以使用以下方式接受 MIME 类型:
/**
* @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
*/
public $file;
但是我怎样才能从那个列表中排除一些东西呢?比方说,我想允许除 PHP 文件之外的所有上传?
您可以通过断言实现回调约束。此方法的一个优点是您可以将错误消息应用于表单中的任何字段(或多个字段)。
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);
}
}
}
您无需创建任何回调即可执行此操作。只要确保:
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