2017-05-16 115 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', 
]);