0

Zend_Formフィールドのデータを検証するために、Float検証を使用しています。

しかし、検証の動作は懸念事項です。

フォームがFirefoxまたはChromeを介して投稿された場​​合は正しく検証されますが、IEを介して使用された場合は無効と表示されます。

IEでは、10より大きい値、つまり10.00より大きい値を検証しますが、値が10.00より小さい場合は無効と表示されます。

フォームにロケールが定義されていないため、デフォルトでとして使用されると思いますen

検証はサーバー側で機能するものであり、クライアントインターフェイスは影響を与えないはずですが、それでも影響はあるようです。

フォームクラス:

class Application_Form_Custom extends Zend_Form {
    public function init() {
        $this->setMethod('post');
        $this->setName('form_custom');
        $this->setElementFilters(array('StringTrim','StripTags'));

        $notEmpty = new Zend_Validate_NotEmpty();
        $notEmpty->setMessage('Value is required', 'isEmpty');

        $valid_float = new Zend_Validate_Float();
        $valid_float -> setMessages(array(
            'floatInvalid' => 'Invalid',
            'notFloat'     => 'Invalid'
        ));
        $deposit = new Zend_Form_Element_Text(array(
            'name' => 'txtDeposit',
            'style' => 'width:99%;',
            'autocomplete' => 'off'
        ));
        $deposit -> setLabel('Deposit : ');
        $deposit -> setValue('0.00');
        $deposit -> setRequired(true);
        $deposit -> addValidators(array(array(
            $notEmpty,
            true
        ), array(
            $valid_float,
            true
        )));

        $submit = new Zend_Form_Element_Submit('btnSubmit');
        $submit -> setLabel('Submit');
        $reset = new Zend_Form_Element_Reset('btnReset');
        $reset -> setLabel('Reset');

        $this->addElements(array(
            $deposit,
            $submit,
            $reset
        ));
    }
}

コントローラ:

class FormsController extends Zend_Controller_Action {
    public function customFormAction() {
        $form= new Application_Form_Custom();
        if ($this->getRequest()->isPost() && $form->isValid($this->_request->getPost())) {
            ///...blah...blah...about my process
        }
        $this->view->form =$form;
    }
}

意見 :

<form id="<?php echo $this->form->getName(); ?>" name="<?php echo $this->form->getName(); ?>" action="" method="<?php echo $this->form->getMethod(); ?>">
    <table width="100%" border="0" cellpadding="4" cellspacing="0">
        <tr>
          <td align="left" valign="top" nowrap="nowrap">Deposit</td>
          <td><?php echo $this->form->txtDeposit->renderViewHelper(); 
          if(count($this->form->txtDeposit->getMessages()) > 0) {
              ?><br />
            <div style="color:#F00;">
              <?php
              $i=0;
              foreach($this->form->txtDeposit->getMessages() as $msg) {
                  echo $msg;
                  $i++;
                  if(count($this->form->txtDeposit->getMessages())>$i) {
                    echo '<br />';
                  }
              }
              ?>
            </div>
            <?php

          }
          ?></td>
        </tr>
        <tr align="left" valign="top">
          <td colspan="2" align="center" nowrap="nowrap"><?php echo $this->form->btnSubmit->renderViewHelper(); ?> <?php echo $this->form->btnReset->renderViewHelper(); ?></td>
        </tr>
    </table>
</form>
4

0 に答える 0