Laravel Api 未从请求 class 发送所需的错误 json 消息
Laravel Api does not send required error json message from Request class
请求Class
class LoginRequest extends FormRequest
{
public function wantsJson() {
return true;
}
public function authorize() {
return true;
}
public function rules() {
$validators = [
'email' => 'required',
'password' => 'required'
];
return $validators;
}
public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) {
if($validator->fails()) {
//print_r($validator->errors());
//die();
}
return parent::failedValidation($validator);
}
}
我有一个用Laravel写的api。我正在尝试通过 Postman 扩展来测试验证。当我提交一些电子邮件和密码值时,它起作用了。我收到有关凭据是否存在的消息。
如果我不提交值,则不会返回 json 消息包。
我可以确认 MessageBag 中有验证错误消息。这是屏幕截图。如果截图不清楚请点开查看
还有一个比较奇怪的就是返回的状态码是200
如果您需要更多信息,请告诉我
在我的情况下,我这样设置 Laravel API。
在我的 App\Exceptions\Handler
public function render($request, Exception $exception)
{
// return parent::render($request, $exception);
$rendered = parent::render($request, $exception);
if ($exception instanceof ValidationException) {
$json = [
'error' => $exception->validator->errors(),
'status_code' => $rendered->getStatusCode()
];
} elseif ($exception instanceof AuthorizationException) {
$json = [
'error' => 'You are not allowed to do this action.',
'status_code' => 403
];
}
else {
// Default to vague error to avoid revealing sensitive information
$json = [
'error' => (app()->environment() !== 'production')
? $exception->getMessage()
: 'An error has occurred.',
'status_code' => $exception->getCode()
];
}
return response()->json($json, $rendered->getStatusCode());
}
也将其导入顶部
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;
它有助于将错误格式化为 JSON 格式。
我的LoginRequest
看起来像这样(简单)
class LoginRequest 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',
'password' => 'required'
];
}
}
请求Class
class LoginRequest extends FormRequest
{
public function wantsJson() {
return true;
}
public function authorize() {
return true;
}
public function rules() {
$validators = [
'email' => 'required',
'password' => 'required'
];
return $validators;
}
public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) {
if($validator->fails()) {
//print_r($validator->errors());
//die();
}
return parent::failedValidation($validator);
}
}
我有一个用Laravel写的api。我正在尝试通过 Postman 扩展来测试验证。当我提交一些电子邮件和密码值时,它起作用了。我收到有关凭据是否存在的消息。
如果我不提交值,则不会返回 json 消息包。
我可以确认 MessageBag 中有验证错误消息。这是屏幕截图。如果截图不清楚请点开查看
还有一个比较奇怪的就是返回的状态码是200
如果您需要更多信息,请告诉我
在我的情况下,我这样设置 Laravel API。
在我的 App\Exceptions\Handler
public function render($request, Exception $exception)
{
// return parent::render($request, $exception);
$rendered = parent::render($request, $exception);
if ($exception instanceof ValidationException) {
$json = [
'error' => $exception->validator->errors(),
'status_code' => $rendered->getStatusCode()
];
} elseif ($exception instanceof AuthorizationException) {
$json = [
'error' => 'You are not allowed to do this action.',
'status_code' => 403
];
}
else {
// Default to vague error to avoid revealing sensitive information
$json = [
'error' => (app()->environment() !== 'production')
? $exception->getMessage()
: 'An error has occurred.',
'status_code' => $exception->getCode()
];
}
return response()->json($json, $rendered->getStatusCode());
}
也将其导入顶部
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;
它有助于将错误格式化为 JSON 格式。
我的LoginRequest
看起来像这样(简单)
class LoginRequest 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',
'password' => 'required'
];
}
}