Symfony 4.2验证实体的空浮点字段

时间:2019-03-11 13:12:59

标签: forms symfony validation

我正在尝试为具有字符串和浮点类型的表单编写验证器。 如果我要创建一个未存储到数据库的新对象,则一切正常。但是,如果我正在编辑存储在数据库中的对象,并且将字符串或浮点值设置为空,则会得到

Expected argument of type "float", null given at property path "price"

错误。

设置字符串字段的一种解决方法

'empty_data' => '',

或这样创建数据转换器     

namespace App\Form\DataTransformer;

use Symfony\Component\Form\DataTransformerInterface;

class NullToEmptyTransformer implements DataTransformerInterface
{
/**
 * Does not transform anything
 *
 * @param  string|null $value
 * @return string
 */
public function transform($value)
{
    return $value;
}

/**
 * Transforms a null to an empty string.
 *
 * @param  string $value
 * @return string
 */
public function reverseTransform($value)
{
    if (is_null($value)) {
        return '';
    }

    return $value;
}
}

但这不能应用于浮点型字段。验证以前在数据库中有值的空浮点字段的最佳解决方案是什么?

编辑: 我找到了解决方案。问题出在实体设置器中。原来只期望float,所以我不得不将参数类型更改为?float。

1 个答案:

答案 0 :(得分:0)

为什么不为此使用Asserts?首先,您需要安装注释

 composer require symfony/validator doctrine/annotations

要在实体上使用它时,将其导入:

use Symfony\Component\Validator\Constraints as Assert;

这是您必须在实体的属性上使用的方式:

/**
 * @Assert\NotBlank
 * @Assert\Length(min=3)
 */
private $firstName;

这些是断言的一些示例:

* @Assert\Type(type="string")

* @Assert\Type(type="float")

* @Assert\NotBlank()

有关更多信息,https://symfony.com/doc/current/validation.html#properties