16

いくつかのフィールドを持つエンティティがあります。そのうちの 1 つは、フォームの送信後に次のように検証されています。

/**
 * @var integer $anzahl
 *
 * @ORM\Column(name="anzahl", type="integer")
 * @Assert\NotBlank(message="Bitte geben Sie eine Kistenanzahl an.")
 * @Assert\Type(type="numeric", message="Die Kistenanzahl muss eine Zahl sein.")
 * @Assert\Min(limit="1", message="Sie müssen mindestens eine Kiste suchen oder anbieten.")
 */
private $anzahl;

このソリューションには 2 つの問題があります。

ゼロより大きい整数値のみを受け入れます。ただし、float/double もこの検証で受け入れられています。ただし、入力なしに変更@Assert\Type(type="numeric")すると@Assert\Type(type="integer")、true として検証されます。入力が整数値であることを検証するにはどうすればよいですか?

もう 1 つの問題は、明らかに無効な値 (文字列など) を入力した後、タイプ検証のドイツ語のエラー メッセージだけでなく、「この値は有効な数値である必要があります」という英語のメッセージも表示されることです。このメッセージはどこから来て、どうすれば取り除くことができますか?

4

6 に答える 6

24

以下を使用する必要があります。

@Assert\Type(type="integer")

ただし、注意してください。またはIntegerTypeではなく、で使用する必要があります。NumberTypeTextType

Symfony\Component\Form\Extension\Core\Type\IntegerType 

IntegerTypeは、適切なデータ トランスフォーマーNumberTypeが組み込まれている点を除いて、 と同じです。

于 2012-05-07T06:51:28.023 に答える
16

これは私のために働く:

 ->add('field_name', 'integer', array(
     'label' => 'Your label here', 
     'data' => 0, // default value
     'precision' => 0, // disallow floats
     'constraints' => array(
         new Assert\NotBlank(), 
         new Assert\Type('integer'), 
         new Assert\Regex(array(
             'pattern' => '/^[0-9]\d*$/',
             'message' => 'Please use only positive numbers.'
             )
         ),
         new Assert\Length(array('max' => 2))
     )
 ))
于 2014-08-20T14:06:25.017 に答える
5

使用できます

/**
 * @Assert\Regex(pattern="/\d+/")
 */

またはでバリデーターを作成しctype_digitます。

于 2012-05-06T14:27:38.947 に答える
0

フォーム フィールド タイプで使用する必要がありましたが、必須ではありませんが、入力ラベルの横にnumberアスタリスクが表示されました。*だから、私も使わなければなりませんでした'required' => false。フォーム フィールド タイプintegerが機能しませんでした。基礎となるフィールドのデータ型はsmallintです。

->add('storey', 'number', array('required' => false))

Regexタイプが指定されているか、何も指定されていない場合、YMLの制約も機能しませintegerん。どうしてか分かりません

storey:
    - Regex: '/^[0-9]+$/'

私の Symfony のバージョンは 2.7 です。

于 2015-06-19T05:31:10.233 に答える