0

3 つのモデルのデータを収集する Yii フォームを取得しました。私は変更時と送信時にajaxvalidationを使用しています:

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'offer-form',
    'enableAjaxValidation'=>true,
    'enableClientValidation'=>true,
    'clientOptions' => array(
        'validateOnChange'=>true,
        'validateOnSubmit'=>true,
    )   
)); ?>

ここでの問題は、最初の 3 つの入力のみが検証されることです。これらの入力のコードは次のとおりです。

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>

これらの 3 つの入力は、 である 2 つのモデルに使用されます$newspaper and $address。これら 3 つの入力は (変更時および送信時に) 完全に検証され、他の 7 つの入力は検証されません。検証されない入力の 1 つの例:

 <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 が返されますが、エラー状態にはなりません。

間違いか何かを見てくれる人がいるといいのですが。

グリーツ、

4

1 に答える 1

0

エラーが見つかったときに返される理由は、モデルの検証後に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');
于 2013-01-28T09:10:10.917 に答える