我正在尝试使用带有小数的Assert验证规则,但它失败并出现错误。
这是我的表格
$builder->add('cinp_number', 'number', array(
'required' => false,
));
这是我的实体
/**
* @Assert\Type(type="decimal")
* @var decimal
*/
private $cinp_number;
使用字符串值作为输入提交表单时出现错误:
Warning: NumberFormatter::parse(): Number parsing failed
日志消息:
request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: NumberFormatter::parse(): Number parsing failed" at C:\wamp\www\top_service\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer.php line 174 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: NumberFormatter::parse(): Number parsing failed at C:\\wamp\\www\\top_service\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\NumberToLocalizedStringTransformer.php:174)"} []
Symfony版本:3.2.13
答案 0 :(得分:2)
Type
约束基于is_<type>()
或ctype_<type>()
php函数。 php定义中没有decimal
类型。
查看Symfony文档中的list of supported types或PHP REF中的Variable handling Functions / Ctype Functions列表。
在您的情况下,请尝试numeric
。
答案 1 :(得分:1)
要检查表格中的某些值是否为十进制,可以使用以下验证器:
如果定义了最小值/最大值http://symfony.com/doc/current/reference/constraints/Range.html ,则范围
/**
* @Assert\Regex("/^\d+(\.\d+)?/")
*/
private $cinp_number;
正则表达式如果有任何数字,此处您还可以定义允许的格式http://symfony.com/doc/current/reference/constraints/Regex.html
/**
* @Assert\IsTrue()
*/
public function isCinpNumberValid()
{
return $this->cinp_number == (float) $this->cinp_number;
}
IsTrue 并在自定义方法http://symfony.com/doc/current/reference/constraints/IsTrue.html中手动检查每一个
Sync