Yii:如何为ajax调用期间生成的异常显示自定义视图


Yii: How to display a custom view for exception generated during an ajax call

是否可以调用自己的控制器操作来处理Ajax请求上异常错误消息的显示?

Yii网站上已经写了一个关于这个主题的wiki,但它似乎已经过时了。自从作者编写wiki以来,类CErrorHandler似乎已经更改。wiki建议在配置文件中添加以下组件属性:

'errorHandler' => array(
    'errorAction' => 'site/error',
),

但从未达到此控制器操作,因为在CErrorHandler中调用了CApplication::displayError()。

if($this->isAjaxRequest())
    $app->displayError($event->code,$event->message,$event->file,$event->line);

回到我最初的问题,我可以设置自己的控制器操作来处理Ajax请求上错误消息的显示吗?

您可以尝试制作这样的东西:

$handler=$app->getErrorHandler();
$handler->errorAction='my/error';

没有对此进行测试,但可能有效。

此外,您还可以将错误推送到ajax成功调用。

实现您想要做的事情的一种方法是替换(或扩展)CErrorHandler类。

很可能,您必须重新实现handle($event)handleExceptionhandleError。但是,您也可以将isAjaxRequest修改为始终返回false,这样它的行为将与往常一样。

以下是您需要执行的步骤:

protected/ErrorHandler.php:中

<?php
/**
 * ErrorHandler is the customized error handler for the application.
 */
class ErrorHandler extends CErrorHandler {
    public function handle($event) {
            // do something special ...
        parent::handle($event);
    }
    // more special things ...
}

protected/config/main.php:中

return array(
    // ...
    'components'=>array(
        // ...
        'errorHandler'=>array(
            'class' => 'ErrorHandler',
            // ...
            ),
        // ...
    ),
    // ...
);

我希望它能有所帮助!