自定义CFormModel的Yii验证规则不起作用

时间:2013-07-27 08:03:40

标签: php yii validationrules

我有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>

1 个答案:

答案 0 :(得分:1)

您需要在CActiveform

中将 clientOptions validateOnSubmit 属性设置为 true
<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(); ?>

相关问题