2

フロート番号検証付きのフォームを作成しようとしています。検証が機能すると、送信ボタンをクリックできなくなり、適切なエラーメッセージが表示されます。

zendフレームワーク2を使用していますが、フォームでアルコール度数を取得したいと思います。

次のコードを使用しようとしています。

$this->add($factory->createElement(array(
            'name' => 'alcohol_vol',
            'attributes' => array(
                    'label' => 'alcohol vol%:',
                    'filters'    => array('Float'),
                    'type'  => 'text',
                    'required'   => true,
            ),
    )));

これは実際には何もしません。通常のテキストを入力すると、検証に合格します。

また、タイプを「text」から「Number」に変更しようとしましたが、浮動小数点数を使用できません。フロートなしの数値のみが許可されます:)

4

3 に答える 3

2

ZF2には「Float」フィルターはありません。「Float」バリデーターが必要な場合があると思います。フロートバリデーターは、次のようにZF2フォームに追加できます。

$this->add($factory->createElement(array(
        'name' => 'alcohol_vol',
        'attributes' => array(
                'label' => 'alcohol vol%:',
                'type'  => 'text',
        ),
)));
$factory = new Zend\InputFilter\Factory();

$this->setInputFilter($factory->createInputFilter(array(
    'alcohol_vol' =>     array(
        'name' => 'alcohol_vol',
        'required' => true,
        'validators' => array(
            array(
                'name' => 'Float',
            ),
        ),
    ),
)));

次に、コントローラーでフォームを検証する必要があります。上記のバリデーターは引き続きフォームに設定する必要があります。入力がフロートでない場合、入力要素には無効化メッセージがあります。

$form->setData($userInputData);
if (!$form->isValid()) {
  $inputFilter = $form->getInputFilter();
  $invalids = $inputFilter->getInvalidInput();
  var_dump($invalids);
  // output: 'abc' does not appear to be a float
}
于 2012-07-01T12:31:09.923 に答える
1

このフィルターが使えると思います

new Zend\I18n\Filter\NumberFormat("en_US", NumberFormatter::TYPE_DOUBLE);

于 2013-01-18T06:22:27.103 に答える
0

Zend\I18n\Validator\Float クラスをお勧めします。使用例:

$floatInput = new Input('myFloatField');
$floatInput->getValidatorChain()
           ->attach(new \Zend\I18n\Validator\Float());

見る:

于 2014-06-12T19:33:15.413 に答える