2015-06-04 56 views
4

我有兩個字段,即數字和百分比。我希望用戶只在一個輸入字段中輸入值。如果用戶在數字和百分比字段中輸入值,系統應該拋出驗證錯誤。有什麼我們可以用laravel驗證來做到這一點?Laravel驗證:只需要,只有一個字段

謝謝。

回答

4

你可以寫一個自定義的驗證: http://laravel.com/docs/5.0/validation#custom-validation-rules

它可能看起來財產以後這樣的:

class CustomValidator extends Illuminate\Validation\Validator { 

    public function validateEmpty($attribute, $value) 
    { 
     return ! $this->validateRequired($attribute, $value); 
    } 

    public function validateEmptyIf($attribute, $value, $parameters) 
    { 
     $key = $parameters[0]; 

     if ($this->validateRequired($key, $this->getValue($key))) { 
      return $this->validateEmpty($attribute, $value); 
     } 

     return true; 
    } 
} 

註冊它的服務提供商:

Validator::resolver(function($translator, $data, $rules, $messages, $attributes) 
{ 
    return new CustomValidator($translator, $data, $rules, $messages, $attributes); 
}); 

使用它(在一個形式的請求,例如):

class StoreSomethingRequest extends FormRequest { 
    // ... 

    public function rules() 
    { 
     return [ 
      'percentage' => 'empty_if:number', 
      'number'  => 'empty_if:percentage', 
     ]; 
    } 
} 

更新 只是測試它在廷克:

Validator::make(['foo' => 'foo', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails() 
=> true 
Validator::make(['foo' => '', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails() 
=> false 
Validator::make(['foo' => '', 'bar' => 'bar'], ['foo' => 'empty_if:bar'])->fails() 
=> false 
相關問題