laravel5.5自定义错误输出

96
足迹人生2017
2017.12.20 15:08 字数 96

默认情况下出异常情况时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;
    }
}
Laravel
Web note ad 1