Yii使用ajax验证显示错误messagebox的解决方法_php实例

WBOY
Release: 2016-05-16 20:29:08
Original
1033 people have browsed it

本文实例讲述了Yii使用ajax验证显示错误messagebox的解决方法。分享给大家供大家参考。具体方法如下:

yii 自带了ajax 表单验证 这个可能有些朋友不知道了,但我今天在使用yii 自带的ajax 表单验证 时碰到一些问题,下面我来整理例子与大家参考一下。

在Yii中,可以利用ajax执行一个action,但是这个action有时候会有弹出错误讯息的需求,这时候的处理方式如下

基本思想

利用exception,比如:

复制代码 代码如下:
throw new CHttpException(403, 'You are not authorized to perform this action.');

如果这个异常是 CHttpException 或者 YII_DEBUG 为 true的时候,错误消息可以通过CErrorHandler::errorAction来显示。在yiic默认生成的代码中,就是通过在 config/main.php 中加入如下代码来实现的

复制代码 代码如下:
'errorHandler' => array(
    'errorAction' => 'site/error',),

但是在Yii  1.1.9 以上,ajax请求抛出的exceptions是通过CApplication::displayException()来显示的。这使得我们无法定制消息的显示方式。

CGridView 删除请求抛出异常的话就是这个样子,(YII_DEBUG 为 true )

Yii 1.1.9 检查ajax请求的逻辑被移除了,所以现在即便是ajax的异常也是通过CErrorHandler::errorAction处理的。

这样ajax的消息就可以DIY了。

示例

通过如下代码

复制代码 代码如下:
public function actionError(){
    if($error=Yii::app()->errorHandler->error)
    {
        if(Yii::app()->request->isAjaxRequest)
            echo $error['message'];
 else
            $this->render('error', $error);
    }
}

后来又发现一个站长分享了一段代码

model:

复制代码 代码如下:
public function rules()
{
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('content, author, email', 'required'),
            array('author, email, url', 'length', 'max'=>128),
            array('email','email'),
            array('url','url'),
        );
}

controller:
复制代码 代码如下:
if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form')
{
    echo CActiveForm::validate($model);
    Yii::app()->end();
}

view:
复制代码 代码如下:
beginWidget('CActiveForm',array(
    'id'=>'post-form',                      //这是表单id
    'enableAjaxValidation'=>true,      //这里一定写 true
)); ?>
   

   


         echo $form->labelEx($model,'title');
 ?>
        textField($model,'title',array('size'=>80,'maxlength'=>128));
 ?>
         echo $form->error($model,'title');
 ?>
   

   


         echo $form->labelEx($model,'content');
 ?>
         echo CHtml::activeTextArea($model,'content',array('rows'=>10, 'cols'=>70));
 ?>
       

You may use Markdown syntax.


         echo $form->error($model,'content');
 ?>
   

 
$this->endWidget();
?>

这样好像很好的解决了yii ajax显示问题。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template