Yii,如何在不结束PHP脚本执行的情况下结束Yii应用程序执行


Yii, how do I end Yii app execution without ending PHP script execution

我目前正在编写一个应用程序作为wordpress的插件,因此我需要一些非常规的解决方案。。

目前我的问题是,当Yii收到错误时,它会将错误抛出错误处理程序,然后退出PHP执行。难道不应该有一种方法来沙盒Yii,让它只退出自己的执行,让外部代码继续吗?

在我的情况下,大部分页面都是空白的,没有加载wordpress主题。。因此,设计好的错误页面变得相当棘手。(当一切顺利时,wordpress会在_content()中加载Yii;它与wordpress主题融为一体。)

有什么想法吗?

您有两个选项:

  1. 您必须在每个可能出现异常的位置执行try catch
  2. 处理错误,一旦出现异常,它会将您的所有应用程序重定向到所需的美容错误页面(Wordpress主题)

Yii允许使用控制器动作来处理错误显示工作。为此,我们应该在应用程序中配置错误处理程序配置如下:

return array(
    ......
    'components'=>array(
        'errorHandler'=>array(
            'errorAction'=>'site/error',
        ),
    ),
);

在上文中,我们将CErrorHandler::errorAction属性配置为是指中的错误操作的路由站点/错误SiteController。如果需要,我们可以使用不同的路线。

public function actionError()
{
    if($error=Yii::app()->errorHandler->error)
        $this->render('error', $error);
}

当你使用WordPress 时,你可以自定义路线以及视图的主题

Yii处理错误详细信息

您可能希望最终覆盖默认的Yii错误/异常处理程序,以放入自定义处理程序。如果你看看我关于集成Yii/Wordpress的文章,这里有一个期望处理程序重写的例子。适应你的使用,你应该会没事的。

调整站点/错误处理程序最终不会对您起到很好的作用,因为这往往会抛出400个错误标头,即使您呈现不同的页面,也无法停止。在整合Yii和Wordpress时遇到了困难,因为我第一次尝试了。

让我们知道,如果你能继续下去,我很想有更好的示例代码来将Yii作为插件进行融合。

结束Yii,进行适当的清理,并且不退出请求。如上所示http://www.yiiframework.com/doc/api/1.1/CApplication#end-细节,它是这样做的。

Yii::app()->end(0, false);