4

Symfony2は、入力フィールドの値を10進数または整数のタイプで自動的に変換します。アプリには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.40ではなく12が保存されます。

なんで?それを無効にする方法は?アラビア数字を検証する方法は?助言がありますか?

編集:解決済み、以下を参照

4

2 に答える 2

2

ここでなぜそれが起こるのかという答えを見つけました 。

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

Current Transformer は、整数値をローカライズされた文字列に変換します。numberウィジェット (NumberToLocalizedStringTransformer) とウィジェット (MoneyToLocalizedStringTransformer) でも発生しmoneyます。

したがって、ViewTransformer を使用しない新しい FieldType を登録する必要があると思います。

編集: intl 拡張子を無効にするだけで問題を解決し、すべての数値フィールドがデフォルトの英語の数字を使用するようになりました。intl 拡張機能を有効にすると、入力値にローカライズされた数値のみを使用する必要があります。これはデフォルトの動作です。

于 2012-10-18T18:30:32.967 に答える
0

これは古い投稿ですが、私の回答がこの問題に遭遇した人に役立つことを願っています. 上記のように intl 拡張子を無効にする代わりに、フォーム タイプでデータ トランスフォーマーを使用して、デフォルトのロケールを手動で英語に設定すると、フィールドが英語の数字で表示されるようになります。

1) Data Transformersを使用して、フィールド データを表示するプロセスを中断 (フック) します。

2) Locale を手動で English に設定します。

フォームタイプのdateOfBirthフィールドで行ったことは次のとおりです。

$builder -> add(
  $builder -> create(
    'dateOfBirth', DateType::class, array(
      'label' => 'Date of Birth',
      'widget' => 'single_text',
      'required' => false,
      'html5' => false,
      'attr' => ['class' => 'form-control']
    )) -> addModelTransformer(new CallbackTransformer(
    function($dateOfBirth) {
      \Locale::setDefault('en');
      return $dateOfBirth;
    },
    function($dateOfBirth) {
      return $dateOfBirth;
    }
  ))
);

于 2018-11-05T14:36:41.983 に答える