I have got two fields namely number and percentage. I want a user to input value in only one input field. If a user inputs values in both number and percentage field, the system should throw validation error. Is there anything we can do with laravel validation to achieve this?
Thanks.
You can write a custom validator for that: http://laravel.com/docs/5.0/validation#custom-validation-rules
It may looks somthing like this:
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;
}
}
Register it in a service provider:
Validator::resolver(function($translator, $data, $rules, $messages, $attributes)
{
return new CustomValidator($translator, $data, $rules, $messages, $attributes);
});
Use it (in a form request, for example):
class StoreSomethingRequest extends FormRequest {
// ...
public function rules()
{
return [
'percentage' => 'empty_if:number',
'number' => 'empty_if:percentage',
];
}
}
Update Just tested it in Tinker:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With