在application.dispatcher.throwException关闭的情况下, Yaf在出错的时候不会抛出异常,
而是触发一个相应类型的PHP错误. 此时可以通过Yaf_Dispatcher::setErrorHandler注册一个错误处理器来捕获这些错误.
在错误处理器中, 可以通过Yaf_Application::getLastErrorNo获取最后发生的错误的错误代码, 错误代码是YAF_ERR_*常量之一, 也可以通过Yaf_Application::getLastErrorMsg获取对应的错误信息. 一个例子:
例 10.5. 错误模式
<?php
function error_handler($errno, $errstr, $errfile, $errline) {
var_dump(Yaf_Application::app()->getLastErrorNo());
var_dump(Yaf_Application::app()->getLastErrorNo() == YAF_ERR_NOTFOUND_CONTROLLER);
}
$config = array(
"application" => array(
"directory" => "/tmp/notexists",
"dispatcher" => array(
"throwException" => 0, //发生错误时触发错误而不是抛出异常
),
),
);
$app = new Yaf_Application($config);
$app->getDispatcher()->setErrorHandler("error_handler", E_RECOVERABLE_ERROR);
$app->run();
?>
以上例程的输出类似于:
int(516) bool(true)