Laravel 错误处理,get_class 与 instanceof
Laravel error handling, get_class vs instanceof
在 app/Exceptions/Handler.php 中的以下代码中,第一个不起作用,但第二个起作用。
dd(get_class($exception));
输出 "Illuminate\Database\Eloquent\ModelNotFoundException"。
第一个是similar to the doc。如何使用 instanceof
使其工作?
public function render($request, Exception $exception)
{
//dd(get_class($exception));
// this does not work.
if ($exception instanceof Illuminate\Database\Eloquent\ModelNotFoundException
) {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
// This one works.
if(get_class($exception) == "Illuminate\Database\Eloquent\ModelNotFoundException") {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
return parent::render($request, $exception);
}
要使用 instanceof
,您必须使用完整的 class 名称,如果您的 class 有命名空间,那么您应该使用完全限定的 class 名称class.
还有另一种使用 instanceof
的方法,使用给定 class 的短名称(别名)感谢 use
语句,在您的情况下,您可以像这样使用它所以:
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException; // on top of course :)
if ($exception instanceof ModelNotFoundException) {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
有时会重新抛出 $exception,因此请尝试使用
$exception->getPrevious() instanceof XXX
或
get_class($exception->getPrevious()) == 'XXX'
在 app/Exceptions/Handler.php 中的以下代码中,第一个不起作用,但第二个起作用。
dd(get_class($exception));
输出 "Illuminate\Database\Eloquent\ModelNotFoundException"。
第一个是similar to the doc。如何使用 instanceof
使其工作?
public function render($request, Exception $exception)
{
//dd(get_class($exception));
// this does not work.
if ($exception instanceof Illuminate\Database\Eloquent\ModelNotFoundException
) {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
// This one works.
if(get_class($exception) == "Illuminate\Database\Eloquent\ModelNotFoundException") {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
return parent::render($request, $exception);
}
要使用 instanceof
,您必须使用完整的 class 名称,如果您的 class 有命名空间,那么您应该使用完全限定的 class 名称class.
还有另一种使用 instanceof
的方法,使用给定 class 的短名称(别名)感谢 use
语句,在您的情况下,您可以像这样使用它所以:
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException; // on top of course :)
if ($exception instanceof ModelNotFoundException) {
return response()->json(['error'=>['message'=>'Resouce not found']], 404);
}
有时会重新抛出 $exception,因此请尝试使用
$exception->getPrevious() instanceof XXX
或
get_class($exception->getPrevious()) == 'XXX'