cakephp 2如何抑制或捕获丢失的控制器异常
每当有人试图访问我的cakephp应用程序上不存在的url时,我会遇到一个丢失的控制器异常,如下所示: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
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);
}
}