Symfony表示十进制字段的验证

时间:2017-08-26 11:49:13

标签: symfony symfony-forms

我正在尝试使用带有小数的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

2 个答案:

答案 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