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