2017-08-26 74 views
0

我正在嘗試使用帶有十進制的Assert驗證規則,並且失敗並顯示錯誤。十進制字段的Symfony表單驗證

這是我的形式

$builder->add('cinp_number', 'number', array(
     'required' => false, 
    )); 

這是我的實體

與字符串值作爲輸入submiting形式時,這是將錯誤:

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

的[驗證在symfony的小數2](https://stackoverflow.com/questions/8979689/validating-decimals-in-symfony可能的複製-2) – kunicmarko20

回答

2

Typeis_<type>()ctype_<type>() PHP函數的約束基地。 php定義中沒有decimal類型。

查看Symfony Documentation中的list of supported types或PHP REF中的Variable handling Functions/Ctype Functions列表。

在你的情況下嘗試numeric

+0

我試着'數字',但我總是有同樣的錯誤,當輸入字符串是輸入 '警告:NumberFormatter :: parse():數字解析失敗' –

+0

此警告可能發生在驗證之前。請附上更詳細的警告信息。 – miikes

+0

我使用日誌消息更新了問題 –

0

要檢查在表格一些值是十進制可以使用以下驗證:

範圍萬一最小/最大值被定義http://symfony.com/doc/current/reference/constraints/Range.html

/** 
* @Assert\Range(min=0, max=100500) 
*/ 
private $cinp_number; 

的Regex如果它是任何數目,這裏您還可以定義允許的格式http://symfony.com/doc/current/reference/constraints/Regex.html

/** 
* @Assert\Regex("/^\d+(\.\d+)?/") 
*/ 
private $cinp_number; 

IsTrue運算和在自定義方法手動檢查everyting http://symfony.com/doc/current/reference/constraints/IsTrue.html

/** 
* @Assert\IsTrue() 
*/ 
public function isCinpNumberValid() 
{ 
    return $this->cinp_number == (float) $this->cinp_number; 
} 
+0

謝謝,但爲什麼不會工作TypeAsserts https://symfony.com/doc/current/reference/constraints/Type.html –