【问题标题】:API - validating request in LaravelAPI - 在 Laravel 中验证请求
【发布时间】:2017-06-02 01:23:19
【问题描述】:

我正在创建一个用于从移动应用上传文件的简单 API。

在我的 routes/api.php 文件中,我定义了一条路线:

Route::post("/file", 'UploadController@upload');

然后在我的控制器中验证请求:

public function upload(Request $request){

    $this->validate($request, [
            'name' => 'required',
            'file' => 'file',
            'type' => 'required|in:sign,photo',
        ]);

     // do something here....

}

当请求正确(通过验证)时,一切正常,Laravel 返回 JSON 响应。

但是如果请求没有通过验证,即缺少name 字段,Laravel 会返回 302 页面并尝试将我重定向到登录页面。

当验证失败时,如何使用 JSON 消息返回正确的 40X/50X 错误,而不是 302 重定向页面?

我正在使用 Laravel 5.3 和 Insomnia 来测试 API 调用。

【问题讨论】:

    标签: php laravel api laravel-5


    【解决方案1】:

    validate 方法为正常请求返回重定向,为 AJAX 请求返回 JSON。

    validate 方法接受传入的 HTTP 请求和一组验证规则。如果验证规则通过,您的代码将继续正常执行;但是,如果验证失败,则会抛出异常,并且会自动将正确的错误响应发送回用户。对于传统的 HTTP 请求,会生成重定向响应,而 AJAX 请求会发送 JSON 响应。

    所以你有几个选择,这里有几个:

    • 您可以设置 X-Requested-With 标头,以便 Laravel 认为这是一个 AJAX 请求
    • 您可以创建您的验证器并在其上调用 fails() 并按照您想要的方式处理您的响应:

    $validator = Validator::make($input, $rules);
    if ($validator->fails()) {
        // Custom Response
    }
    

    如果您只制作 API,您可能需要考虑使用 Lumen,因为它针对特定目的进行了更精细的调整。另外就是验证defaults to returning a JSON response

    【讨论】:

    • 谢谢,X-Requested-With 成功了。但是,从 Insomnia 发出的请求并没有被正确识别为 AJAX 请求,这有点奇怪。
    猜你喜欢
    • 2017-10-01
    • 2015-09-24
    • 2018-09-13
    • 2023-03-14
    • 2017-08-28
    • 2014-06-03
    • 1970-01-01
    • 2017-11-21
    • 2020-01-13
    相关资源
    最近更新 更多