所以我正在尝试为一个内部项目开发一个 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/