Forms 非空白断言和;必须是字符串类型,如果给定为空;

Forms 非空白断言和;必须是字符串类型,如果给定为空;,forms,symfony,assert,Forms,Symfony,Assert,使用Symfony 3.3,我有一个断言为NotBlank的实体: class UserContributorVersion { /** * @var string * * @ORM\Column(type="string") * @Assert\NotBlank() */ private $name; /** * Set name * * @param string $name

使用Symfony 3.3,我有一个断言为NotBlank的实体:

class UserContributorVersion
{
    /**
     * @var string
     *
     * @ORM\Column(type="string")
     * @Assert\NotBlank()
     */
    private $name;

    /**
     * Set name
     * 
     * @param string $name
     */
    public function setName(string $name)
    {
        $this->name = $name;
    }
}
但如果我使用novalidate属性验证表单,则会出现以下错误:

传递给AppBundle\Entity\UserContributorVersion::setName()的参数1必须是字符串类型,给定为null

我不明白,如果我没有空的断言,为什么要强制setName(string$name=null)


谢谢:)

对表单数据执行验证。如果表单是针对某个实体的(设置了选项
data\u class
),那么表单数据就是应该修改的实体。在将请求值设置为表单数据(在您的案例实体中)字段后,将执行验证

您可以在此处找到表单提交流程:


验证注册为
FormEvents::POST_SUBMIT
event。请求值被设置为在
POST\u SUBMIT
事件之前形成数据。

因为如果您只按了提交按钮而没有插入任何数据,那么字段为空,并且您键入的内容暗示您需要字符串。非常感谢:)最佳解决方案是什么?在formType中添加断言(在实体中删除)或在实体中的setName()上添加“=null”:谢谢,我认为第二