Laravel:验证json对象

时间:2017-05-16 12:08:03

标签: json laravel validation laravel-5.4

这是我第一次在laravel中使用验证。我试图在下面的json对象上应用验证规则。 json对象名称是有效负载,示例如下所示。

payload = {
  "name": "jason123",
  "email": "email@xyz.com",
  "password": "password",
  "gender": "male",
  "age": 21,
  "mobile_number": "0322 8075833",
  "company_name": "xyz",
  "verification_status": 0,
  "image_url": "image.png",
  "address": "main address",
  "lattitude": 0,
  "longitude": 0,
  "message": "my message",
  "profession_id": 1,
  "designation_id": 1,
  "skills": [
    {
      "id": 1,
      "custom" : "new custom1"
    }
   ]
}

验证码如下所示,出于测试目的,我将名称验证为数字。当我执行下面的代码时,上面的json对象被批准并插入到我的数据库中。相反,它应该给我一个例外,因为我传递带有字母数字值的名字,我做错了什么:

public function store(Request $request)
{

    $this->validate($request, [
        'name' => 'digits',
        'age' => 'digits',
        ]);
}

5 个答案:

答案 0 :(得分:10)

请尝试这种方式

use Validator;

public function store(Request $request)
{
    //$data = $request->all();
    $data = json_decode($request->payload, true);
    $rules = [
        'name' => 'digits:8', //Must be a number and length of value is 8
        'age' => 'digits:8'
    ];

    $validator = Validator::make($data, $rules);
    if ($validator->passes()) {
        //TODO Handle your data
    } else {
        //TODO Handle your error
        dd($validator->errors()->all());
    }
}

位数:值

验证字段必须是数字,且必须具有确切的长度值。

答案 1 :(得分:2)

我在这里看到一些有用的答案,只想补充一下-我的偏好是控制器功能仅处理有效请求。因此,我将所有验证保留在请求中。在验证请求中的所有规则之后,Laravel将请求注入控制器功能。通过一个小的调整(或更好的一个特征),标准FormRequest非常适合验证json帖子。

客户端example.js

List<String> letters = filteredStream.collect(Collectors.toList());

project / routes / api.php

var data = {first: "Joe", last: "Dohn"};
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST",'//laravel.test/api/endpoint');
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(JSON.stringify(data));

app / Http / Requests / MyJsonRequest.php(由Route::any('endpoint', function (\App\Http\Requests\MyJsonRequest $request){ dd($request->all()); }); 生成)

php artisan make:request MyJsonRequest

答案 2 :(得分:1)

您的有效负载应为payload: {,然后您可以

$this->validate($request->payload, [
    'name' => 'required|digits:5',
    'age' => 'required|digits:5',
    ]);

或者如果您没有发送有效负载密钥,则可以使用$ request-&gt; all()

答案 3 :(得分:1)

zlib

答案 4 :(得分:0)

使用Validator工厂类,而不是使用从控制器特征派生的validate方法。它接受有效负载的数组,因此您需要先对其进行解码

\Validator::make(json_decode($request->payload, true), [
    'name' => 'digits',
    'age' => 'digits',
]);