[041] Symfony4 表单验证 NULL 异常处理

2019-03-17  本文已影响0人  观星汉

在表单中, 某些字段允许为空的情况下, 有可能发生异常信息

Expected argument of type "string", "NULL" given at property path "name"
  • 这个情况是发生在 Form 的 handleRequest() 阶段, 表单的值并未进入验证步骤中.
  • 这个情况发生在给创建表单的对象中传入了实体类. 这个异常是由这个实体类发生的.

通常对于未填写值的表单, SF的Form会统一默认为 null, 由于这个原因, 由 make:entity 创建是实体类, 我们来看一下代码片段:

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

由于 Setter 方法的参数声明了需要接受 string 类型的参数, 然而 Form 给传入了一个 null, 所以抛出了异常. 问题发现了就比较好解决了.

    public function setName(?string $name): self
    {
        $this->name = (string)$name;

        return $this;
    }

这PHP7.1版本之后, 函数的参数类型声明支持 可空类型 (在参数类型前增加一个问号?), 对于函数返回的结果类型也同样支持这一的声明.

$formBuilder = $this->createFormBuilder($user);

//原来的表单声明
$formBuilder->add('name', TextType::class); 

//新的表单声明
$formBuilder->add('name', TextType::class, ['empty_data' => '']);

由于修改 Entity 代码比较麻烦, 建议使用方法二来处理此类问题会比较方便.

上一篇 下一篇

猜你喜欢

热点阅读