Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel validation rules if field empty another field required

I have a Laravel 5.3 app, and an update form where I send user profile values. One of them is user image as well, I am creating a hidden input field for it, so if the user is not uploading any new image, I can still see that he has the hidden field with the old image value.

<input type="hidden" class="form-control" name="old_image" value="{{ $player->image_filename }}" id="oldImage">

If he removes the image, the hidden input value becomes empty.

document.getElementById('oldImage').value = '';

That is how I thought of updating a user image. But I don't know how to set up validation rules for that form. Something that would be similar to this:

    public function rules()
    {
        return [
          'first_name' => 'required|max:50',
          'last_name' => 'required|max:50',
          'birthday' => 'required',
          'image' => required if old_image empty
        ];
    }

I have tried with 'image' => 'required_without:old_image', and also with 'image' => 'required_if:old_image, null', but none of them showed any error message for missing image. I am showing error messages like this:

like image 559
Ludwig Avatar asked Jan 23 '17 11:01

Ludwig


2 Answers

You can work with two rules

'image' => 'required_if:old_image'

Or:

'image' => 'required_without:old_image'
like image 111
Richelly Italo Avatar answered Oct 13 '22 10:10

Richelly Italo


this is can be done by required_without rule, if it's not working please show an actual sample request data ( dd(request()->all() )) and the validation rules you are using. the scenario you want to catch is simple: if both fields is empty.

in your example, applying this rule should work:

return [
          // ...
          'image' => 'required_without:old_image'
        ];

required_without:foo,bar,...

The field under validation must be present and not empty only when any of the other specified fields are not present. Validation - Laravel 5.3

Example:

$rules = [
        'new_value' => 'required_without:old_value'
        ];

validator(
        ['new_value' =>'',
        'old_value' => 'old value is preserved here']
    , $rules)->errors()->toArray();

// output: [] <-- no errors!

validator(
        ['new_value' =>'New value!',
        'old_value' => '']
    , $rules)->errors()->toArray();

// output: [] <-- no errors!

validator(
        ['new_value' =>'',
        'old_value' => '']
    , $rules)->errors()->toArray();

// output: ["new_value" => ["The new value field is required when old value is not present."]]
like image 43
MohannadNaj Avatar answered Oct 13 '22 10:10

MohannadNaj