zcyxm 2012-11-21 17:30:15 3837次浏览 3条回复 0 0 0
if(isset($_POST['ajax']) && $_POST['ajax']==='create-form')
{
    echo CActiveForm::validate($model);//or  echo CActiveForm::validate($tradeModel);
    Yii::app()->end();
}

这个东西到底是做啥用的?

我看过文档,时而觉得懂了,时而就觉得很迷糊。

我今天在做一个表单提交两个model的时候,view里面设置的

'enableAjaxValidation'=>true,
    'enableClientValidation'=>true,
    'clientOptions'=>array(
        'validateOnSubmit'=>true,
    ),
<?php echo $form->errorSummary(array($model,$tradeModel)); ?>

觉得很奇怪的是,我只要设置了if(isset($_POST['ajax']) && $_POST['ajax']==='create-form'),要么就是不能同时显示错误提示,要么就是不能同时进行ajax验证。为啥啊?

  • 回复于 2012-11-21 17:37 举报

    下面的代码片段是视图文件的示例代码,说明如何使用CActiveForm:

    <?php $form = $this->beginWidget('CActiveForm', array(
        'id'=>'user-form',
        'enableAjaxValidation'=>true,
        'enableClientValidation'=>true,
        'focus'=>array($model,'firstName'),
    )); ?>
    
    <?php echo $form->errorSummary($model); ?>
    
    <div class="row">
        <?php echo $form->labelEx($model,'firstName'); ?>
        <?php echo $form->textField($model,'firstName'); ?>
        <?php echo $form->error($model,'firstName'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model,'lastName'); ?>
        <?php echo $form->textField($model,'lastName'); ?>
        <?php echo $form->error($model,'lastName'); ?>
    </div>
    
    <?php $this->endWidget(); ?>
    

    为了响应AJAX验证请求,我们需要下列类代码:

    public function actionCreate()
    {
        $model=new User;
        $this->performAjaxValidation($model);
        if(isset($_POST['User']))
        {
            $model->attributes=$_POST['User'];
            if($model->save())
                $this->redirect('index');
        }
        $this->render('create',array('model'=>$model));
    }
    
    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
    

    手册上这样说的

  • 回复于 2012-11-21 17:41 举报

    我的问题就是,一个表单提交两个model,用了performAjaxValidation的话,<?php echo $form->errorSummary(array($model,$tradeModel)); ?> 就不能显示两个model的错误,总是先显示一个,当一个没有错误的时候才显示另外一个。而且,比方说,其中一个model的有一个字段必须是数字,我写了汉字,就在输入框下面提示错误,但是另外个model的错误就不提示了。

  • 回复于 2012-12-20 11:37 举报

    errorSummary这个是不会显示ajax的错误提示的,我试过了已经。<?php echo $form->error($model,'firstName'); ?>这个会显示

您需要登录后才可以回复。登录 | 立即注册