您好我是laravel的新手并使用自定义异常处理。
我已经发现了我所知道的所有例外情况,并且工作正常。根据我的理解,set_exception_handler
用于处理未捕获的异常。现在我有两个问题:
1)我必须知道我对set_exception_handler
的理解是否正确。
2)如何在laravel 5中实现它来处理未捕获的异常
这就是我在控制器中实现set_exception_handler
的方法
class SearchController extends BaseController{
public function getTitleMessage($exc){
var_dump("set exception handler".$exc);
return json_encode("Error");
}
public function genericSearch(){
//Bussiness logic goes here
set_exception_handler('getTitleMessage');
throw new Exception("Search Failed");
}
这显示set_exception_handler
不是有效回调的错误。所以我已将代码更改为
set_exception_handler(array($this,'getTitleMessage'));
但也不适合我。有人指导我如何在laravel控制器中实现它。提前致谢
答案 0 :(得分:1)
Laravel已经使用了全局异常处理程序
查看vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php
文件;正如您在bootstrap
方法中看到的那样,Laravel已使用set_exception_handler
将handleException
方法设置为全局异常处理程序
当引发未捕获的异常时,该方法最终会调用App\Exceptions\Handler::render
。
因此,如果您想以某种方式处理您未手动捕获的异常,您只需将代码添加到render
方法:
应用\例外\ Handler.php 强>
public function render($request, Exception $e)
{
//DO WATHEVER YOU WANT WITH $e
return parent::render($request, $e);
}
答案 1 :(得分:1)
您已在app \ Exceptions \ Handler.php渲染方法中实现自定义异常处理程序逻辑:
public function render($request, Exception $exception) {
if (method_exists($e, 'render') && $response = $e->render($request)){
return Router::prepareResponse($request, $response);
} elseif ($e instanceof Responsable) {
return $e->toResponse($request);
}
$e = $this->prepareException($e);
/* Your custom logic */
if ($e instanceof HttpResponseException) {
return $e->getResponse();
} elseif ($e instanceof AuthenticationException) {
return $this->unauthenticated($request, $e);
} elseif ($e instanceof ValidationException) {
return $this->convertValidationExceptionToResponse($e, $request);
}
return parent::render($request, $exception);
}