我正在使用Laravel 5.3开发RESTful API,因此我正在使用我的控制器测试一些功能和请求。我需要做的一件事是在我的数据库中添加字段之前验证用户发送的请求,因此,我使用自定义FormRequest来验证它。
当我在Postman中测试我的API并发送无效请求时,响应会将我重定向到主页。阅读文档后,我发现了以下声明
如果验证失败,将生成重定向响应以发送 用户回到以前的位置。错误也将闪现 到会议,所以他们可以显示。如果请求是 一个AJAX请求,一个带有422状态代码的HTTP响应 返回给用户,包括验证的JSON表示 错误。
我该怎样防止这种情况?或者Postman中有一个AJAX模式?有什么建议吗?
答案 0 :(得分:17)
这也可以在不覆盖任何功能的情况下实现。 Laravel旨在支持Json
和普通页面。
请更改postman
中的设置,并将Accept
设置为application/json
,如下所示
Laravel是SMART; - )
答案 1 :(得分:6)
您的自定义FormRequest扩展Illuminate\Foundation\Http\FormRequest
。 Within是一个执行名为response()
的重定向的函数。只需在自定义FormRequest中覆盖此功能,即可更改无效验证的响应方式。
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\JsonResponse;
class CustomFormRequest extends FormRequest
{
/**
* Custom Failed Response
*
* Overrides the Illuminate\Foundation\Http\FormRequest
* response function to stop it from auto redirecting
* and applies a API custom response format.
*
* @param array $errors
* @return JsonResponse
*/
public function response(array $errors) {
// Put whatever response you want here.
return new JsonResponse([
'status' => '422',
'errors' => $errors,
], 422);
}
}
答案 2 :(得分:-3)
我解决了这个安装这个包的问题: https://github.com/asvae/laravel-api-tester
这个包提出了AJAX请求,所以我的API响应正如我预期的那样