我在我的后端laravel API中有错误处理程序的问题,不显示验证的错误消息。
路由/API
<?php
Route::group([
'middleware' => 'api',
], function ($router) {
Route::post('access/sign-up', 'AuthenticationController@signUp');
});
AuthenticationController
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\SignUpRequest;
use Illuminate\Http\Request;
use App\User;
class AuthenticationController extends Controller
{
/**
* Create a new AuthenticationController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api', ['except' => ['signUp']]);
}
/**
*
*
* @return \Illuminate\Http\JsonResponse
*/
public function signUp(SignUpRequest $request)
{
//User::create($request->all());
return response()->json([
'data' => 'Usuario creado correctamente.'
]);
}
}
注册请求
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SignUpRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|email|unique:users',
'firstName' => 'required',
'password' => 'required',
];
}
}
问题是,当 Postman 我发送密码在空白或不发送邮件,例如,它送我到主页面,而不是给我一个JSON与所有的错误像以前一样。我不知道该怎么办我尝试在SignUpRequest中使用自定义消息,但这不是问题,认为在错误处理程序中有某种重定向。
9条答案
按热度按时间jtjikinw1#
只需将该代码添加到SignUpRequest
idfiyjo82#
您需要检查一个设置必须在Postman中的头数据中添加Accept Type
接受:application/json
这是我的工作……
pepwfjgg3#
使用表单请求;如果验证失败,则将生成重定向响应,以将用户发送回其先前位置。这就是为什么你重定向回页面而不是响应JSON。
Laravel有一个受保护的方法“failedValidation”。在表单请求类中覆盖此方法。
uz75evzq4#
更新laravel 8,ValidationException中的第一个参数是Validator类:
kiayqfof5#
TL;DR添加以下标题:
Accept: application/json
正如这里的一些用户所提到的,默认情况下,当表单请求失败时,应用程序将尝试将用户重定向回其先前的位置。这就是为什么你收到的是一个网页而不是一个JSON响应。
我们也可以覆盖“failedValidation”方法。但我建议在请求
Accept: application/json
上设置以下头。Laravel将根据
Accept
头返回相应的响应。对于application/json
,Laravel将返回一个带有表单错误的JSON响应。yzuktlbb6#
简单地说,在App\Exceptions\Handler中,您必须在register()方法中注册您的自定义异常处理:
eimct9ow7#
将此方法添加到formRequest类中。它在laravel9中工作
zengzsys8#
在laravel 9/10
在我的例子中,我有一个小的
POST
API
控制器,它处理一个短逻辑。我想把它包含在类中,不使用任何
FormRequest
规则,因为它只有一个方法来创建一个资源,只有一个参数这就是我所做的:
Laravel 10 Doc手动验证
t3irkdon9#
只需将该代码添加到
App\Exceptions\Handler
即可: