json - 在 Laravel 5.4 中禁用请求验证重定向

标签 json laravel request-validation

所以我正在尝试为一个内部项目开发一个 rest API,我遇到了一个问题,当表单请求验证失败时,它会显示 @index 响应。

所以我有两条路线;

Route::get('/api/clients', 'ClientController@index');
Route::post('/api/clients', 'ClientController@store');
@index列出所有客户端,@store创建一个新客户端,我在 @store 上有一个表单请求验证器为客户端提供了检查名称的方法。

我想要的是当验证器失败时,它会显示带有验证错误的 JSON 响应。但我认为它发生的是验证失败,所以它重定向回同一页面,但重定向是 GET而不是 POST ,因此它会列出所有客户端。

我知道你可以设置你的标题,使它看起来像一个 ajax 请求,它会正确显示 JSON 响应,但我希望它显示 JSON 响应,无论它是否是 ajax。

我试过覆盖 response我的验证器中的方法不起作用,我尝试设置 wantsJson验证器中的方法返回 true 再次不起作用。

非常感谢帮助。

代码如下...

web.php
Route::get('/api/clients', 'ClientController@index');
Route::get('/api/clients/{client}', 'ClientController@show');
Route::post('/api/clients', 'ClientController@store');
Route::put('/api/clients/{id}', 'ClientController@update');
Route::delete('/api/clients/{id}', 'ClientController@delete');

ClientController.php
namespace App\Http\Controllers;

use App\Client;
use App\Http\Requests\ClientRequest;

class ClientController extends Controller
{

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(ClientRequest $request)
    {
        return Client::create([
            'title'   => request('title'),
            'user_id' => auth()->id()
        ]);
    }

ClientRequest.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ClientRequest 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 [
            'title' => 'required'
        ];
    }

    /**
     * Get the failed validation response for the request.
     *
     * @param array $errors
     * @return JsonResponse
     */
     public function response(array $errors)
     {
         dd('exit'); // Doesn't work
     }
}

最佳答案

你可以这样试试

在您的表单请求中首先包含如下使用

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

进而
protected function failedValidation(Validator $validator) {
        throw new HttpResponseException(response()->json($validator->errors(), 422));
    }

现在,如果您尝试验证,那么它将返回
{
"title": [
"The  title field is required."
]
}

关于json - 在 Laravel 5.4 中禁用请求验证重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350307/

相关文章:

json - 使用 NewtonSoft 获取特定的 Json 字段

python - Tweepy:现在可以使用 Twitter 搜索 API 获取旧推文了吗?

python - 在 Python 中递归检查 JSON 对象

python - Curl Post Json 数据未在 Python Django 中读取

php - Laravel4 验证器和可空字段

json - 如何在laravel中验证json数据

.NET 4.0 上的 ASP.NET MVC2 : is [ValidateInput(false)] enough?

php调用嵌套函数

c# - 控制级别 ValidateRequestMode 没有效果

cors - 使用 AWS API Gateway 请求验证器时启用 CORS