2017-05-16 136 views
1

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

payload = { 
    "name": "jason123", 
    "email": "[email protected]", 
    "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', 
     ]); 
} 
+0

你应该使用'如果(用$ validator->失败())integer'只接受数字或'alpha'只字母字符 – Onix

回答

4

请尝试这种方式

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()); 
    } 
} 

位数:值

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

+0

{ return response() - > json($ validator-> messages(),200); }是一个更好的方式来处理消息 – rchatburn

+0

@rchatburn是的。我正在使用这种方式的API。 –

0

你的有效载荷应payload: {那么你可以做

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

,或者如果您不发送有效载荷的关键,你可以只使用$请求 - >所有()

+0

我发送带有“有效载荷”键的json对象,但是当我尝试像这样访问它时,我得到错误:$ request-> payload error:validate()必须是Illuminate \ Http \ Request,给定字符串的实例。 – MTA

+0

@MTA在这种情况下,使用QuỳnhNguyễn答案并用$ request-> load()替换$ request-> all() – rchatburn

0

使用Validator工厂类代替使用validate方法派生自控制器的特征。它接受的有效载荷数组,所以你需要对它进行解码第一

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