所以我正在尝试为一个内部项目开发一个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,但它再次不起作用。
帮助将不胜感激。
代码如下...
网页.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');
客户端控制器.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()
]);
}
客户端请求.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
}
}