2013-07-27 55 views
0

我有這個cformmodel定製Yii的驗證規則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

你能解釋一下你想要做的更多細節嗎?看起來你有一堆變量你試圖確保是整數? – acorncom

+1

如果將'enableAjaxValidation'設置爲'false',您怎麼能期望通過AJAX驗證表單? –

+0

我沒有看到。 10x –

回答

1

你需要設置validateOnSubmit的clientOptions財產真正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(); ?>