cakephp 2如何抑制或捕获丢失的控制器异常

cakephp 2如何抑制或捕获丢失的控制器异常,cakephp,cakephp-2.0,newrelic,Cakephp,Cakephp 2.0,Newrelic,每当有人试图访问我的cakephp应用程序上不存在的url时,我会遇到一个丢失的控制器异常,如下所示: MissingControllerException: Uncaught exception 'MissingControllerException' with message 'Controller class AutodiscoverController could not be found.' in /app/Vendor/cakephp/cakephp/lib/Cake/Routing

每当有人试图访问我的cakephp应用程序上不存在的url时,我会遇到一个丢失的控制器异常,如下所示:

MissingControllerException: Uncaught exception 'MissingControllerException' with message 'Controller class AutodiscoverController could not be found.' in /app/Vendor/cakephp/cakephp/lib/Cake/Routing/Dispatcher.php:161
<?php
class AppExceptionHandler extends ErrorHandler{
    public static function handleException($error) {
        if(get_class($error) == 'MissingControllerException') {
            if (extension_loaded('newrelic')) {
                newrelic_ignore_transaction();
            }
        }
        parent::handleException($error);
    }
}
我想这是应该的,但它给New Relic带来了一个问题。这是我们的监控应用程序,它将始终注册这些异常,并通知每个人应用程序存在问题


是否有方法捕获或抑制异常,以便New Relic不注册它?

是的,您可以在应用程序控制器->beforeFilter功能中管理它

if($this->name == 'CakeError'){
// Perform any action in error
}

这就是我最终解决问题的原因:

我安装了newrelic的PHP代理:
sudo apt get install newrelic-php5

然后我为我的应用程序配置了一个ExceptionHandler。在core.php中:
Configure::write('Exception.handler','AppExceptionHandler::handleException')

在bootstrap.php中:
App::使用('AppExceptionHandler','Lib')

处理程序位于app/Lib/AppExceptionHandler.php
中,如下所示:

MissingControllerException: Uncaught exception 'MissingControllerException' with message 'Controller class AutodiscoverController could not be found.' in /app/Vendor/cakephp/cakephp/lib/Cake/Routing/Dispatcher.php:161
<?php
class AppExceptionHandler extends ErrorHandler{
    public static function handleException($error) {
        if(get_class($error) == 'MissingControllerException') {
            if (extension_loaded('newrelic')) {
                newrelic_ignore_transaction();
            }
        }
        parent::handleException($error);
    }
}