2017-09-14 184 views
1

我在Laravel 5.5 API上有一個POST端點,我用郵遞員來測試我的路線,這裏是問題所在。 我想發送相同類型的對象的數組,像這樣:Laravel驗證對象json的數組

[ 
    { 
    "name":"test", 
    "tag":"TEST" 
    }, 
    { 
    "name":"test2", 
    "tag":"TEST_2" 
    } 
] 

但我不能設法正確驗證它。

在我的控制,我有這樣的:

$validator = Validator::make($requests->all(), [ 

    'name' => 'required|string', 
    'tag' => 'required|string' 
]); 

if($validator->fails()) 
    //Warn user for errors 

我也試圖用簡單的

$this->validate($requests->all() ....) 

我試着用'.name''*.name',但沒有成功重命名規則。

我試圖用$request->input()代替$request->all()但沒有成功。

我也試圖遍歷它,但我得到的例外

foreach($request as $req){ 

    $validator = Validator::make($req ....) 

    //rest of the code 
} 

在另一方面,我可以檢索這樣$datas = $request->all()數據並存儲它們,但沒有驗證。

,這似乎是工作的唯一的解決辦法是命名我數組:

{ 
"data" : [ 
     { 
     "name":"test", 
     "tag":"TEST" 
     }, 
     { 
     "name":"test2", 
     "tag":"TEST_2" 
     } 
    ] 
} 

然後命名與'data.*.name'的規則,但這迫使API用戶可以分析陣列。 讓假設我有一個數組$array至極我要存儲,我需要做的

$arrayParsed = ['data' => $array] 

,並調用API與$arrayParsed,我認爲這是一個有點多餘。

有沒有更好的方法來處理這個問題?

+0

您需要使用密鑰發送數據,然後像上一個例子中所做的那樣進行驗證。這是正確的方法。 –

回答

2

你可以嘗試規避先做問題:

$data = [ 'data' => $requests->all() ]; 

然後你可以用你建議的規則:

$validator = Validator::make($data, [ 
    'data.*.name' => 'required|string', 
    'data.*.' => 'required|string' 
]); 

不是最完美的解決方案,但它可以解決您的問題..

+0

我喜歡這個解決方案,但我是API新手,讓用戶放置'data':array還是應該自己按照你的建議自己做?什麼是發送對象數組的正確方法? – Irindul

+0

我已經使用了要求在請求中發送「數據」的API,並且我看到其他人沒有。這實際上取決於你如何實現這些API。如果他們想要使用API​​,開發人員將在任何情況下遵循您的文檔。但越容易,它們就越有可能使用它。 –