默认情况下出异常情况时laravel5.5输出的是一个异常的html页面,对于用laravel做api调用时 抛出异常Html页面显然不够友好,我们可以通过自定义错误异常类的方式来解决
1.先自定义一个错误处理handler,在app\Exceptions下面
<?php
/**
* 自定义api异常处理
* Created by PhpStorm.
*/
namespace App\Exceptions;
use Exception;
class ApiHandler extends Handler
{
public function handler(Exception $exception)
{
//可以处理成需要的格式
$return = [
'status' => "fail",
'message' => $exception->getMessage(),
'data' => []
];
return $return;
}
public function render($request, Exception $exception)
{
#当.env中的APP_DEBUG配置为True时调用原有的错误处理方式,false使用自定义的错误处理方式
if (config('app.debug')) {
return parent::render($request, $exception);
}
return $this->handler($exception);
}
}
2.修改bootstrap/app.php
<?php
$app = new Illuminate\Foundation\Application(
realpath(__DIR__ . '/../')
);
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
#将默认的Handler修改为自定义的ApiHandler
// App\Exceptions\Handler::class
App\Exceptions\ApiHandler::class
);
return $app;
3.测试
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Mockery\Exception;
class DogsController extends Controller
{
public function index()
{
$i = 1/0;
}
}
网友评论