正在更新 Laravel 5.4。到 5.5 中断验证响应

Updating Laravel 5.4. to 5.5 breaks validation responses

我在 laravel 5.4 上有一个 API 运行,我想更新到 5.5 我已将 composer.json 更新为 "laravel/framework": "5.5.*" 和 "phpunit/phpunit": "~6.0"

问题是,现在每当出现验证错误时,我总是会收到带有消息 "The given data is invalid" 的状态代码 500,而不是我过去使用 [=22] 收到的实际错误和适当的状态代码=]

我是否在更新过程中遗漏了一些我必须更改才能使其正常工作的内容?

Response : Array
(
    [message] => The given data was invalid.
    [status_code] => 500
    [debug] => Array
        (
            [line] => 306
            [file] => E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Validation\Validator.php
            [class] => Illuminate\Validation\ValidationException
            [trace] => Array
                (
                    [0] => #0 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Validation\ValidatesRequests.php(46): Illuminate\Validation\Validator->validate()
                    [1] => #1 E:\Projects\overwatch\overwatch-backend\app\Http\Controllers\Api\AuthController.php(58): App\Http\Controllers\Controller->validate(Object(Dingo\Api\Http\Request), Array)
                    [2] => #2 E:\Projects\overwatch\overwatch-backend\app\Http\Controllers\Api\AuthController.php(44): App\Http\Controllers\Api\AuthController->authenticateUser(Object(Dingo\Api\Http\Request))
                    [3] => #3 [internal function]: App\Http\Controllers\Api\AuthController->login(Object(Dingo\Api\Http\Request))
                    [4] => #4 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): call_user_func_array(Array, Array)
                    [5] => #5 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('login', Array)
                    [6] => #6 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Route.php(212): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Api\AuthController), 'login')
                    [7] => #7 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Route.php(169): Illuminate\Routing\Route->runController()
                    [8] => #8 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php(658): Illuminate\Routing\Route->run()
                    [9] => #9 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Dingo\Api\Http\Request))
                    [10] => #10 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Http\Middleware\PrepareController.php(45): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Dingo\Api\Http\Request))
                    [11] => #11 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Dingo\Api\Http\Middleware\PrepareController->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [12] => #12 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [13] => #13 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Dingo\Api\Http\Request))
                    [14] => #14 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php(660): Illuminate\Pipeline\Pipeline->then(Object(Closure))
                    [15] => #15 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php(635): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Dingo\Api\Http\Request))
                    [16] => #16 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php(601): Illuminate\Routing\Router->runRoute(Object(Dingo\Api\Http\Request), Object(Illuminate\Routing\Route))
                    [17] => #17 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php(590): Illuminate\Routing\Router->dispatchToRoute(Object(Dingo\Api\Http\Request))
                    [18] => #18 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Routing\Adapter\Laravel.php(81): Illuminate\Routing\Router->dispatch(Object(Dingo\Api\Http\Request))
                    [19] => #19 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Routing\Router.php(513): Dingo\Api\Routing\Adapter\Laravel->dispatch(Object(Dingo\Api\Http\Request), 'v1')
                    [20] => #20 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Http\Middleware\Request.php(126): Dingo\Api\Routing\Router->dispatch(Object(Dingo\Api\Http\Request))
                    [21] => #21 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(114): Dingo\Api\Http\Middleware\Request->Dingo\Api\Http\Middleware\{closure}(Object(Dingo\Api\Http\Request))
                    [22] => #22 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [23] => #23 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [24] => #24 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [25] => #25 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [26] => #26 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [27] => #27 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [28] => #28 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [29] => #29 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [30] => #30 E:\Projects\overwatch\overwatch-backend\vendor\barryvdh\laravel-cors\src\HandlePreflight.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [31] => #31 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Barryvdh\Cors\HandlePreflight->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [32] => #32 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Dingo\Api\Http\Request))
                    [33] => #33 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Http\Middleware\Request.php(127): Illuminate\Pipeline\Pipeline->then(Object(Closure))
                    [34] => #34 E:\Projects\overwatch\overwatch-backend\vendor\dingo\api\src\Http\Middleware\Request.php(103): Dingo\Api\Http\Middleware\Request->sendRequestThroughRouter(Object(Dingo\Api\Http\Request))
                    [35] => #35 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(149): Dingo\Api\Http\Middleware\Request->handle(Object(Dingo\Api\Http\Request), Object(Closure))
                    [36] => #36 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
                    [37] => #37 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
                    [38] => #38 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
                    [39] => #39 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
                    [40] => #40 E:\Projects\overwatch\overwatch-backend\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php(345): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
                    [41] => #41 E:\Projects\overwatch\overwatch-backend\tests\ApiTester.php(90): Illuminate\Foundation\Testing\TestCase->call('POST', 'api/v1/login/', Array, Array, Array, Array)
                    [42] => #42 E:\Projects\overwatch\overwatch-backend\tests\Unit\Api\LoginTest.php(38): Tests\ApiTester->request('POST', Array)
                    [43] => #43 [internal function]: Tests\loginTest->test_login_with_missing_credentials()
                    [44] => #44 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestCase.php(1071): ReflectionMethod->invokeArgs(Object(Tests\loginTest), Array)
                    [45] => #45 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestCase.php(939): PHPUnit\Framework\TestCase->runTest()
                    [46] => #46 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestResult.php(698): PHPUnit\Framework\TestCase->runBare()
                    [47] => #47 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestCase.php(894): PHPUnit\Framework\TestResult->run(Object(Tests\loginTest))
                    [48] => #48 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestSuite.php(755): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
                    [49] => #49 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestSuite.php(755): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
                    [50] => #50 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\Framework\TestSuite.php(755): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
                    [51] => #51 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\TextUI\TestRunner.php(546): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
                    [52] => #52 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\TextUI\Command.php(195): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
                    [53] => #53 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\src\TextUI\Command.php(148): PHPUnit\TextUI\Command->run(Array, true)
                    [54] => #54 E:\Projects\overwatch\overwatch-backend\vendor\phpunit\phpunit\phpunit(53): PHPUnit\TextUI\Command::main()
                    [55] => #55 {main}
                )

        )

)

在laravel 5.5中,所有异常都转换为HTTP响应。如果您想以旧样式(JSON 错误格式)维护它,您应该将以下方法添加到您的 App\Exceptions\Handler class.

use Illuminate\Validation\ValidationException;

protected function invalidJson($request, ValidationException $exception)
{
    return response()->json($exception->errors(), $exception->status);
}

view docs