首页 > 解决方案 > 验证 Laravel 中的所有 JSON 请求

问题描述

我正在使用 RegisterRequest 请求类创建一个注册函数,它应该验证请求:

public function register(RegisterRequest $request)
{
  //
}

请求验证 (RegisterRequest) 如下所示:

<?php

namespace App\Http\Requests\Api\User;

use App\Http\Requests\Request;

class RegisterRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true; // TODO: should secure this.
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email|unique:users,email',
        ];
    }
}

但是我收到名称和电子邮件丢失的错误,我认为这是因为请求是以 JSON 格式发送的。如何使此请求验证我提供的 JSON 输入?提前致谢。

我提出请求的方式:

handleSubmit (data) {
      // Register User
      this.$http
        .post('/api/user/register', data)
        .then(response => {
          console.log(response)
          // Clear form
          // Show snackbar
        })
        .catch(error => {
          console.error(error)
        })
        .finally(
          // Update items in DataTable
          console.log(data)
        )
    }

当我console.log(data);向我展示这个时:

{"name":"asdsfsdf","email":"sdfsfd@sdfs.com"}

当我尝试像这样验证时:

       $validator = Validator::make($request->json()->all(), [
            'name' => 'required',
            'email' => 'required|email|unique:users,email',
        ]);

它有效,但我想将此逻辑与控制器分开。

标签: jsonlaravel

解决方案


根据您的评论,您没有将数据正确发送到服务器 --- 您将其作为数组键发送。在您的 AJAX/request 调用中,发送数据如下(我使用axios库作为演示,但架构也可以应用于 jquery 或其他 js 工具):

axios.post('/link/to/web/route', {
    name: 'my name',
    email: 'my email',
}).then(response=>{
    alert('Data sent with success!')
}).catch(error=>{
    alert('Error has occurred. Please check browser console');
    console.log(error)
})

推荐阅读