Правила проверки Yii для пользовательской модели CFormModel не работают

У меня есть это cformmodel:

<?php

class CombinationForm extends CFormModel {

    public $a;
    public $b;
    public $c;
    public $d;
    public $e;
    public $f;

    public function rules() {
        return array(
            array('a, b, c, d, e, f', 'required'),
            array('a, b, c, d, e, f', 'numerical', 'integerOnly' => true),
        );
    }

}

Когда пользователь вводит буквы вместо цифр, я хочу поймать ошибку с помощью ajax.

Это действие:

    public function actionIndex() {
        $model_combination_form = new CombinationForm();
        $this->performAjaxValidation($model_combination_form);
        if (isset($_POST['CombinationForm'])) {
//            echo '<pre>';
//            print_r($_POST['CombinationForm']);
//            echo '</pre>';
        }
        $this->render('combination_form', array(
            'model_combination_form' => $model_combination_form,
        ));
    }

Это должно было вызвать проверку ajax, но этого не произошло.

Это форма:

<div style="position:relative;float:left;">

    <?php
    $form = $this->beginWidget('CActiveForm', array(
        'id' => 'combination-form',
        'enableAjaxValidation' => false,
    ));
    ?>

    <?php echo $form->errorSummary($model_combination_form); ?>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'a', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'b', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'c', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'd', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'e', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo $form->textField($model_combination_form, 'f', array('style' => 'width:20px;')); ?>
    </div>

    <div style="float:left;padding:5px 5px;">
        <?php echo CHtml::submitButton('Genereaza'); ?>
    </div>

    <?php $this->endWidget(); ?>

</div>
<div style="clear:both;"></div>

person Ionut Flavius Pogacian    schedule 27.07.2013    source источник
comment
Можете ли вы объяснить более подробно, что вы пытаетесь сделать? Похоже, у вас есть куча переменных, которые вы пытаетесь обеспечить целыми числами?   -  person acorncom    schedule 27.07.2013
comment
Как вы можете ожидать, что форма будет проверена через AJAX, если вы установите enableAjaxValidation на false?   -  person Michael Härtl    schedule 27.07.2013
comment
Я этого не видел. 10x   -  person Ionut Flavius Pogacian    schedule 27.07.2013


Ответы (1)


Вам необходимо установить для свойства validateOnSubmit clientOptions значение true в CActiveform

<div style="position:relative;float:left;">

<?php
$form = $this->beginWidget('CActiveForm', array(
    'id' => 'combination-form',
    'enableAjaxValidation' => true,
    'clientOptions=>array(
         //validation when submitting form, if validation don't perform, form will not send
        'validateOnSubmit'=>true,
    )
));
?>

<?php echo $form->errorSummary($model_combination_form); ?>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'a', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'b', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'c', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'd', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'e', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo $form->textField($model_combination_form, 'f', array('style' => 'width:20px;')); ?>
</div>

<div style="float:left;padding:5px 5px;">
    <?php echo CHtml::submitButton('Genereaza'); ?>
</div>

<?php $this->endWidget(); ?>

person msoa    schedule 29.07.2013