2015-12-04 55 views
1

我使用Laravel 5的Form Request Validation功能來驗證表單輸入。Laravel 5驗證 - 驗證2個字段的總和

在我的表格中,我有2個字段num_adultsnum_children

我需要確保兩個字段的總和不超過某個值。

我已經試過在我的驗證文件的rules()功能,我用merge()人爲添加一個新的輸入值,既num_adultsnum_children的總和。

$this->merge([ 
    'max_persons' => $this->input('num_adults') + $this->input('num_children') 
]); 

然後在規則陣列返回,

$rules = [ 
    'num_adults' => 'integer|max:2', 
    'num_children' => 'integer|max:1', 
    'max_persons' => 'integer|max:2', 
]; 

驗證爲num_adultsnum_children工作正常。但max_persons似乎被忽略。

回答

2

我可能會跳過數組合並,並有我的規則,如:

$rules = [ 
    'num_adults' => 'integer|max:'.(2-$this->get('num_children', 0)) , 
    'num_children' => 'integer|max:'.(2-$this->get('num_adults', 0)) 
]; 

2爲最大允許值。

另一方面,您已經開始的方法爲錯誤消息提供了更多的靈活性。

驗證器在更新數組之前已經具有值,因此它不知道您的添加。您可以將一個驗證器方法添加到請求對象,以便在過程中稍早的時候合併您的值。

public function validator(Factory $factory) 
{ 
    $this->merge([ 
     'max_persons' => $this->input('num_adults') + $this->input('num_children') 
    ]); 

    return $factory->make(
     $this->all(), 
     $this->rules(), 
     $this->messages() 
    ); 
} 
+0

第二種解決方案有效。謝謝! – wyred