【问题标题】:Symfony: Error with File ConstraintSymfony:文件约束错误
【发布时间】:2014-09-22 21:38:45
【问题描述】:
->add('shots','file', array(
    'multiple' => true,
    **'constraints' => array(
        new Constraints\Image(array(
            'maxSize' => '10M',
            'allowSquare' => false,
            'allowPortrait' => false,
            'minRatio' => 1.43,
            'maxRatio' => 2.4
        )),
    )**
))

这是带有集成表单验证器的 symfony 表单的一部分。但我收到一个我不明白的错误:

UnexpectedTypeException: Expected argument of type "string", "array" given

没有标记部分,一切正常。我检查了表单约束的引用,但我没有得到解决方案...

【问题讨论】:

  • 你能提供你的异常的堆栈跟踪吗?
  • @barius 我该怎么做?

标签: forms symfony validation


【解决方案1】:

这是Symfony\Component\Validator\Constraints\FileValidator,它会抛出这个异常。 期望您的表单值可以转换为字符串,但得到数组...

您应该尝试使用 All 约束作为 File 的环绕约束,如下所示:

->add('shots','file', array(
    'multiple'    => true,
    'constraints' => array(
        new All(array(
            'constraints' => array(
                new Image(array(
                    'maxSize'       => '10M',
                    'allowSquare'   => false,
                    'allowPortrait' => false,
                    'minRatio'      => 1.43,
                    'maxRatio'      => 2.4
                ))
            )
        ))
    ))
))

http://symfony.com/fr/doc/current/reference/constraints/All.html

【讨论】:

  • 嘿,这确实有效!但我对这个解决方案并不感到惊讶......有更好的建议吗?而且我真的不明白,为什么我的尝试会产生错误?!
  • 这是因为您使用的是“多文件上传器”。因此,您的值在逻辑上将是一个 File 数组。但是您设置的约束不知道如何处理数组值(因为它会引发异常)。在处理数组或值集合时,创建约束 All 以包装其他约束
  • 我认为在将multiple 更改为false 之后,它也应该适用于初始设置。
  • @barius 当然,但这违背了验证多个文件的意图
【解决方案2】:

试试这个方法:

use Symfony\Component\Validator\Constraints\Image;
...
...
...
->add('shots','file', array(
    'multiple'    => true,
    'constraints' => array(
        new Image(array(
            'maxSize'       => '10M',
            'allowSquare'   => false,
            'allowPortrait' => false,
            'minRatio'      => 1.43,
            'maxRatio'      => 2.4
        )),
    )
))

【讨论】:

  • 为什么要改变一些东西?我做了:“使用 Symfony\Component\Validator\Constraints 作为约束”,所以我只选择了一种更短的方式......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2011-10-04
  • 2019-09-22
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多