使yii 1.1继续处理非关键错误


Make yii 1.1 contunie working with non noncritical errors

使用yii 1.1有时我发现在我的代码中的任何错误(即使是非关键的,如未定义的变量),我的应用程序的工作被停止和错误页面显示,也我的网站的所有输出是不可见的。是否有一种方法可以继续呈现具有非关键错误的页面?也许使用xdebug_start_error_collection和xdebug_get_collected_errors方法从这里http://www.xdebug.org/docs/basic ?

这样做的能力更多地与PHP的功能和特性有关,而不是Yii。

在开始的时候,我要警告这不是一个好主意,因为有时遇到的错误可能会对接下来发生的事情产生影响。(例如,即使在尝试读取客户记录返回错误后,仍然能够完成订单。)

正确的方法是在代码中处理所有可能的结果。

为了能够捕获意外错误,使用PHP的try{} catch{}机制。

try {
   something_to_do();
}
catch($e){
   handle_some_error();
}
continue_processing();

但是,如果您想继续您的目标行,请查看PHP的错误处理功能,特别是:http://php.net/manual/en/function.set-error-handler.php

特别是,一个好的技术是创建一个错误处理程序,如下面的代码所示。
function HandleErrors() {
  $errorDetails = error_get_last();
  $ignoreSettings = E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_STRICT | E_DEPRECATED | E_USER_DEPRECATED;
  print_r($errorDetails);
  print_r($ignoreSettings);
  if (($errorDetails['type'] & $ignoreSettings) == 0) {
     do_things_to_handle_the_error;
  }
}
register_shutdown_function('HandleErrors');