2015-06-04 55 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 
相关问题