2012-10-18 85 views
3

Symfony2自動翻譯輸入字段值與十進制或整數類型。 我有兩種語言爲我的應用程序:阿拉伯語和英語 我創建了一個實體與以下字段:在Symfony 2中禁用自動翻譯輸入值

/** 
* @var float $price 
* 
* @ORM\Column(name="price", type="decimal", scale=2, nullable=true) 
* 
* @Assert\Regex(pattern="/^[0-9]+(\.\d{1,2})?$/",message="Incorrect price.") 
* @Assert\Type(type="float") 
* @Assert\Min(0) 
*/ 
private $price; 

在形式上我讓SF猜測字段類型:

$builder->add('price') 

我在阿拉伯語界面中加載編輯此實體的表單。 在價格字段中,我看到١٢٫٤而不是12.40。 由於HTML5驗證失敗,我無法保存表單。 如果我在當前字段中輸入12.40並保存實體,則12將被保存,而不是12.40。

爲什麼?如何禁用它?如何驗證阿拉伯數字? 有什麼建議嗎?

編輯:解決,請參閱下面

+0

只是一個想法,不知道它是否足夠:你可以嘗試使用你的表單部件的「數字」類型:$ builder-> add('price','number') – Julien

+0

是的,我試了一下。如果我爲小部件設置了「數字」類型或「整數」,則symfony將轉換該值。如果我設置了「文本」小部件,那麼symfony不會翻譯它。 – Mikhail

回答

3

我找到了答案,爲什麼會發生here 正如你所看到的,symfony的註冊ViewTransformer這些構件類型:

$builder->addViewTransformer(
     new IntegerToLocalizedStringTransformer(
      $options['precision'], 
      $options['grouping'], 
      $options['rounding_mode'] 
    )); 

電流互感器變換的整數值到本地化的字符串。它發生的number小部件(NumberToLocalizedStringTransformer)和money小部件(MoneyToLocalizedStringTransformer)也是如此。

所以我認爲需要註冊一個不會使用ViewTransformer的新FieldType。

編輯:我解決了問題,只是禁用INTL擴展,現在所有的數字字段都使用默認的英文數字。如果啓用intl擴展名,則應僅在輸入值中使用本地化數字,這是默認行爲。