Yii:捕获特定 Controller 的所有异常

标签 yii

我正在开发一个包含 REST API 组件的项目。我有一个专门用于处理所有 REST API 调用的 Controller 。

是否有任何方法可以捕获该特定 Controller 的所有异常,以便我可以对这些异常采取与应用程序的其他 Controller 不同的操作?

IE:我想使用包含异常消息的 XML/JSON 格式的 API 响应进行响应,而不是使用默认的系统 View /堆栈跟踪(这在 API 上下文中并不是真正有用)。宁愿不必将 Controller 中的每个方法调用包装在自己的 try/catch 中。

感谢您提前提供任何建议。

最佳答案

你可以通过注册onErroronException事件监听器来完全绕过Yii默认的错误显示机制。

示例:

class ApiController extends CController
{
  public function init()
  {
    parent::init();

    Yii::app()->attachEventHandler('onError',array($this,'handleError'));
    Yii::app()->attachEventHandler('onException',array($this,'handleError'));
  }

  public function handleError(CEvent $event)
  {        
    if ($event instanceof CExceptionEvent)
    {
      // handle exception
      // ...
    }
    elseif($event instanceof CErrorEvent)
    {
      // handle error
      // ...
    }

    $event->handled = TRUE;
  }

  // ...
}

关于Yii:捕获特定 Controller 的所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11127479/

相关文章:

php - Yii 中 registerCssFile 的正确位置是什么?

php - yii应用地址

php - Yii 框架 : No Database selected

php - 在 Yii2 中创建带有链接的按钮

php - 一次向两个表中插入记录

javascript - 固定在 Yii Bootstrap 中的顶部菜单

php - Twitter 解析文本中的方形符号

php - index.php YII 中的 ERR_TOO_MANY_REDIRECTS

php - Yii:根据下拉列表选择更改输入文本字段值

php - 如何在 GridView 上显示过滤模型关系