[英]Yii ajaxform validation only validates a part of the form
我得到了一個Yii表格,該表格收集了三個模型的數據。 我在更改和提交時使用ajaxvalidation:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'offer-form',
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'clientOptions' => array(
'validateOnChange'=>true,
'validateOnSubmit'=>true,
)
)); ?>
現在的問題是,只有前三個輸入得到驗證,這些輸入的代碼:
1:
<div class="input-bg wide-input">
<?php
//fill this field after selecting newspaper
echo $form->hiddenField($newspaper, 'id'); ?>
<?php echo $form->textField($newspaper, 'name', array('maxlength' => 45, 'placeholder'=>'Krantnaam')); ?>
<?php echo $form->error($newspaper, 'name', array('class'=>'error')); ?>
</div>
<a class="button gray-button">Aanbieden</a>
2和3:
<div class="input-bg linked-input">
<?php echo $form->textField($address, 'postalcode', array('maxlength' => 45, 'placeholder'=>'Postcode')) ?>
<?php echo $form->error($address, 'postalcode'); ?>
</div>
<div class="input-bg linked-input">
<?php echo $form->textField($address, 'street_number', array('maxlength' => 45, 'placeholder'=>'Huisnummer')); ?>
<?php echo $form->error($address, 'street_number'); ?>
</div>
這三個輸入用於兩個模型$newspaper and $address
。 現在的情況是,這三個輸入都經過了完美驗證(在更改和提交時),而其他七個輸入沒有得到驗證,其中一個輸入未經驗證的示例:
<div class="input-bg linked-input">
<?php echo $form->textField($offer, 'firstname', array('maxlength' => 45, 'placeholder'=>'Voornaam')); ?>
<?php echo $form->error($offer, 'firstname'); ?>
</div>
最后,我將發布我的控制器代碼:
$this->performAjaxValidation($offer, 'offer-form');
$this->performAjaxValidation($address, 'offer-form');
$this->performAjaxValidation($newspaper, 'offer-form');
if(Yii::app()->getRequest()->getIsAjaxRequest()) {
echo CActiveForm::validate( array($address));
echo CActiveForm::validate( array($offer));
echo CActiveForm::validate( array($newspaper));
print_r($_POST);
die();
//Yii::app()->end();
}
如果我提交或更改表單,我確實會返回JSON並帶有未經過驗證的字段的錯誤,但它們不會出現錯誤狀態。
我希望有人可以看到錯誤或其他任何東西。
格蕾茲
一旦發現錯誤,它返回的原因是在驗證模型后, performAjaxValidation
調用Yii::app()->end()
。 為了驗證幾種模型,請使用以下方法
protected function performTabularAjaxValidation($models, $form = null) {
if (Yii::app()->getRequest()->getIsAjaxRequest() && (($form === null) || ($_POST['ajax'] == $form))) {
echo CActiveForm::validateTabular($models);
Yii::app()->end();
}
}
並在您的控制器方法中
$this->performTabularAjaxValidation(array($address,$offer,$newspaper),'offer-form');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.