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

Yii,如何在不结束PHP脚本执行的情况下结束Yii应用程序执行,yii,wordpress,php,Yii,Wordpress,Php,我目前正在编写一个应用程序作为wordpress的插件,因此我需要一些非传统的解决方案 目前我的问题是,当Yii得到一个错误时,它会在错误处理程序中抛出该错误,然后退出PHP执行。难道不应该有一种方法让沙盒Yii只退出自己的执行,让外部代码继续吗 在我的例子中,大部分页面都是空白的,没有一个wordpress主题被加载。。因此,设计好的错误页面变得非常困难。(一切正常时,wordpress会在_content()中加载Yii,并与wordpress主题融合。) 有什么想法吗?结束Yii,适当清理

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

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

在我的例子中,大部分页面都是空白的,没有一个wordpress主题被加载。。因此,设计好的错误页面变得非常困难。(一切正常时,wordpress会在_content()中加载Yii,并与wordpress主题融合。)


有什么想法吗?

结束Yii,适当清理,不退出请求。如图所示,是这样做的

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

结束Yii,进行适当清理,不退出请求。如图所示,是这样做的

Yii::app()->end(0, false);
您有两个选择:

  • 您必须在每个可能出现异常的位置执行
    尝试捕获
  • 处理错误,然后一旦出现异常,它会将所有应用重定向到所需的美容错误页面(带有Wordpress主题)
  • Yii允许使用控制器操作来处理错误显示工作。 为此,我们应该在应用程序中配置错误处理程序 配置如下:

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

    使用WordPress时,您可以自定义路由以及视图的主题

    您有两个选择:

  • 您必须在每个可能出现异常的位置执行
    尝试捕获
  • 处理错误,然后一旦出现异常,它会将所有应用重定向到所需的美容错误页面(带有Wordpress主题)
  • Yii允许使用控制器操作来处理错误显示工作。 为此,我们应该在应用程序中配置错误处理程序 配置如下:

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

    使用WordPress时,您可以自定义路由以及视图的主题


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

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


    让我们知道,如果你得到它去,会喜欢有更好的示例代码融合Yii上作为一个插件

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

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


    让我们知道,如果你得到它去,会喜欢有更好的示例代码融合Yii上作为一个插件

    但是这不也会扼杀PHP的执行吗?@AlexanderKuzmin,使用capapplication::end(0,false);?有关详细信息,请参阅。@kekkis问题在于以某种方式挂接错误处理程序,因为错误处理程序会自动调用Yii::app()->end(),因此我必须以某种方式防止这种情况发生。但这是否也会扼杀PHP的执行?@AlexanderKuzmin,使用capapplication::end(0,false);?有关详细信息,请参阅。@kekkis问题在于以某种方式挂接错误处理程序,因为错误处理程序会自动调用Yii::app()->end(),因此我必须以某种方式防止出现这种情况。谢谢!这就是我想要的@亚历山德库兹明很高兴听到;-)非常感谢。这就是我想要的@亚历山德库兹明很高兴听到;-)
    public function actionError()
    {
        if($error=Yii::app()->errorHandler->error)
            $this->render('error', $error);
    }