如果在 laravel 中验证失败则返回错误
Returning error if the validation fails in laravel
我正在使用 ajax 将数据填充到数据库中。我想要的是,如果输入的数据未通过验证,我想收到错误消息。我的控制器中有以下代码:
public function store(Request $request)
{
$rules = $this->category->getRules();
if ($request->validate($rules)->fails())
{
return Response::json(array(
'success' => false,
'errors' => $request->validate($rules)->getMessageBag()->toArray()
), 400);
}
$data = $request->all();
$data['title'] = $request->title;
$data['is_parent'] = $request->is_parent;
$data['parent_id'] = $request->parent_id;
$data['priority'] = $request->priority;
$data['icon'] = $request->icon;
$data['slug'] = $request->slug;
$data['show_in_nav'] = $request->show_in_nav;
$this->category->fill($data);
$status = $this->category->save();
if($status){
return response()->json(['status'=>true,'data'=>'Category created successfully.']);
} else {
return response()->json(['status'=>false,'data'=>null]);
}
}
它仍然在控制台中给出错误 422(无法处理的实体),但在 json 中没有。我怎样才能找到 json 中的错误,以便我可以将其显示给用户?
您可以发出表单请求 class 以添加验证逻辑并将验证错误响应为 json 数据。首先,使用 artisan 命令创建表单请求 class。
php artisan make:request CategoryRequest
这将在 App\Http\Requests
目录中创建 CategoryRequest.php
,如下所示:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CategoryRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// add validation rules here
];
}
/**
* Get the validation error messages that apply to the request.
*
* @return array
*/
public function messages()
{
return [
// add validation error messages associated with rules or you can leave this empty
];
}
}
现在,在上述函数中添加您的验证规则和消息。为了 return 格式的 json 验证错误,只需在上面 class:
添加以下函数
/**
* Return validation errors as json response
*
* @param Validator $validator
*/
protected function failedValidation(Validator $validator)
{
$response = [
'status' => 'failure',
'status_code' => 400,
'message' => 'Bad Request',
'errors' => $validator->errors(),
];
throw new HttpResponseException(response()->json($response, 400));
}
并且不要忘记在 CategoryRequest 的顶部添加以下内容 class:
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
现在,您可以得到 json 格式的错误。您可以访问响应中的错误,例如 response.errors
希望你明白。
感谢大家的努力,但我只是通过在 ajax:
中这样做得到了我想要的输出
error: function(response){
let data = response.responseJSON.errors;
$.each( data, function( key, value ) {
$( "<span class='text-danger'>"+value+"</span>" ).insertAfter( "#"+key );
});
}
此外,我不必在验证中编写条件,只需执行以下对我有用的操作即可。
public function store(Request $request)
{
$rules = $this->category->getRules();
$request->validate($rules);
$data = $request->all();
$data['name'] = $request->name;
$data['is_parent'] = $request->is_parent;
$data['parent_id'] = $request->parent_id;
$data['priority'] = $request->priority;
$data['icon'] = $request->icon;
$data['slug'] = $request->slug;
$data['show_in_nav'] = $request->show_in_nav;
$this->category->fill($data);
$status = $this->category->save();
if($status){
return response()->json(['status'=>true,'data'=>'Category created successfully.']);
} else {
return response()->json(['status'=>false,'data'=>null]);
}
}
我正在使用 ajax 将数据填充到数据库中。我想要的是,如果输入的数据未通过验证,我想收到错误消息。我的控制器中有以下代码:
public function store(Request $request)
{
$rules = $this->category->getRules();
if ($request->validate($rules)->fails())
{
return Response::json(array(
'success' => false,
'errors' => $request->validate($rules)->getMessageBag()->toArray()
), 400);
}
$data = $request->all();
$data['title'] = $request->title;
$data['is_parent'] = $request->is_parent;
$data['parent_id'] = $request->parent_id;
$data['priority'] = $request->priority;
$data['icon'] = $request->icon;
$data['slug'] = $request->slug;
$data['show_in_nav'] = $request->show_in_nav;
$this->category->fill($data);
$status = $this->category->save();
if($status){
return response()->json(['status'=>true,'data'=>'Category created successfully.']);
} else {
return response()->json(['status'=>false,'data'=>null]);
}
}
它仍然在控制台中给出错误 422(无法处理的实体),但在 json 中没有。我怎样才能找到 json 中的错误,以便我可以将其显示给用户?
您可以发出表单请求 class 以添加验证逻辑并将验证错误响应为 json 数据。首先,使用 artisan 命令创建表单请求 class。
php artisan make:request CategoryRequest
这将在 App\Http\Requests
目录中创建 CategoryRequest.php
,如下所示:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CategoryRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// add validation rules here
];
}
/**
* Get the validation error messages that apply to the request.
*
* @return array
*/
public function messages()
{
return [
// add validation error messages associated with rules or you can leave this empty
];
}
}
现在,在上述函数中添加您的验证规则和消息。为了 return 格式的 json 验证错误,只需在上面 class:
添加以下函数/**
* Return validation errors as json response
*
* @param Validator $validator
*/
protected function failedValidation(Validator $validator)
{
$response = [
'status' => 'failure',
'status_code' => 400,
'message' => 'Bad Request',
'errors' => $validator->errors(),
];
throw new HttpResponseException(response()->json($response, 400));
}
并且不要忘记在 CategoryRequest 的顶部添加以下内容 class:
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
现在,您可以得到 json 格式的错误。您可以访问响应中的错误,例如 response.errors
希望你明白。
感谢大家的努力,但我只是通过在 ajax:
中这样做得到了我想要的输出error: function(response){
let data = response.responseJSON.errors;
$.each( data, function( key, value ) {
$( "<span class='text-danger'>"+value+"</span>" ).insertAfter( "#"+key );
});
}
此外,我不必在验证中编写条件,只需执行以下对我有用的操作即可。
public function store(Request $request)
{
$rules = $this->category->getRules();
$request->validate($rules);
$data = $request->all();
$data['name'] = $request->name;
$data['is_parent'] = $request->is_parent;
$data['parent_id'] = $request->parent_id;
$data['priority'] = $request->priority;
$data['icon'] = $request->icon;
$data['slug'] = $request->slug;
$data['show_in_nav'] = $request->show_in_nav;
$this->category->fill($data);
$status = $this->category->save();
if($status){
return response()->json(['status'=>true,'data'=>'Category created successfully.']);
} else {
return response()->json(['status'=>false,'data'=>null]);
}
}