【问题标题】:Yii ajaxform validation only validates a part of the formYii ajaxform 验证只验证表单的一部分
【发布时间】:2013-01-28 08:14:36
【问题描述】:

我有一个 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,其中包含未经验证的字段的错误,但它们不会收到错误状态。

我希望有人可以看到错误或其他任何内容。

问候,

【问题讨论】:

    标签: php ajax forms yii


    【解决方案1】:

    发现错误后返回的原因是performAjaxValidation在验证模型后调用Yii::app()-&gt;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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多