2017-04-26 27 views
3

我確認的請求Laravel 5.4與驗證器,請參閱文檔: https://laravel.com/docs/5.4/validation#validating-arraysLaravel 5 - 根據需要驗證陣列,但允許空數組要傳遞

基本上,它是此代碼的控制器:

public function createSomeResource(Request $request) 
{ 
    $this->validate($request, [ 
     'items' => 'required', 
    ]; 
    ... 
} 

我想需要現場「項目」的存在,並且這個代碼,但問題是,當「物品」字段爲空數組,即

驗證失敗
{ 
    "fields": [] 
} 

,這是一種不希望的行爲。我知道這是「必需」參數的記錄行爲,但我沒有看到任何「乾淨」的解決方法。我也試過:

public function createSomeResource(Request $request) 
{ 
    $this->validate($request, [ 
     'items' => 'required_unless:items,[]', 
    ]; 
    ... 
} 

,但它也將失敗,可能是因爲該文件說,它有不同的現場工作的「required_unless」條款後,但我不能完全確定這件事。

你能否建議我一種方法來要求存在字段「項目」而不禁止空數組?

編輯:我想到的另一個「顯而易見的」方法是使用「present | array」規則,它幾乎做我想做的事情,但不幸的是,一個空字符串也通過了驗證規則,這也是也許是錯誤的Laravel,也許不是 - 我開的一個問題它在Laravel的github倉庫:https://github.com/laravel/framework/issues/18948

+0

跳過到下一個s在鏈接到的文檔之後的文檔中可能會出現什麼情況? 「自定義驗證規則」 - 如果需要,您可以編寫自己的自定義驗證邏輯。 – CBroe

+0

好的,這將是一個解決方案,但我認爲它太麻煩,因爲您必須通過修改驗證器外觀創建自定義驗證器,如果我沒有丟失任何東西。我認爲這個要求是非常基本的,所以我希望有一個更簡單的解決方案,或者我只是錯過了如何很好地編寫自定義驗證邏輯,也許你可以給我一個代碼片段解釋你將如何在這個具體的最好通過擴展現有的「所需」驗證規則。 –

+0

也許使用$ this-> validate($ request,[ 'items'=>'array', ]; –

回答

7

試試這個:

public function createSomeResource(Request $request) 
{ 
    $this->validate($request, [ 
     'items' => 'present|array', 
    ]; 
    ... 
} 
+0

是的,我試了它,它幾乎做我想要的,但空字符串仍然通過驗證規則以及(你可以在artisan修補程序中試用它),我不知道如何使用現有規則修復它:/我已經在Laravel的github存儲庫上打開了一個問題:https://github.com/laravel/framework/issues/18948 –

+1

@RafaelK。看起來上面的問題是通過使用'ConvertEmptyStringsToNull'中間件解決的。我遇到了和你同樣的問題,並且[present](https://laravel.com/docs/5.4/validation #rule-present)驗證修改他工作得很好。如果它適合你,請接受答案! – Stetzon

2

這裏,我們去...哥們

public function createSomeResource(Request $request) 
{ 
    $validate_us_pls = [ 
     'title' => 'required|unique:posts|max:255', 
     'body' => 'required', 
    ]; 


    if(!empty($request->get('items'))){ 
     $validate_us_pls['items'] = 'required'; 
    } 

    $this->validate($request, $validate_us_pls); 

}