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>