Sead Silajdzic
Sead Silajdzic

Reputation: 319

Laravel 8 "not required" validation rule

how can I "tell" laravel that if the email field with validation rule 'email' and URL field (for example field where I expect the user to put his Facebook account link but that field IS NOT required) with validation rule 'URL' is not required and it is fine if it is empty. I have put nullable() on all database table columns but my validation rule still applies like it is required. Here are the parts of the code.

This is from migration:

        $table->string('site_facebook')->nullable();
        $table->string('site_instagram')->nullable();
        $table->string('site_twitter')->nullable();
        $table->string('site_linkedin')->nullable();
        $table->string('site_behance')->nullable();
        $table->string('site_dribbble')->nullable();
        $table->string('site_email')->nullable();

This part is from validation:

        'site_facebook' => 'url',
        'site_facebook' => 'url',
        'site_instagram' => 'url',
        'site_twitter' => 'url',
        'site_linkedin' => 'url',
        'site_behance' => 'url',
        'site_dribbble' => 'url',
        'site_email' => 'email',

So, to wrap up my question. I want my URL and email fields to be optional not required :)

EDIT

Since there are some answers and no one work for me I just want to mention (if it does do anything with it), all of my validation rules are in a separate request...

    class ManageSiteSettingsRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'site_name' => 'required|max:50',
        'site_facebook' => 'nullable|url',
        'site_facebook' => 'url',
        'site_instagram' => 'url',
        'site_twitter' => 'url',
        'site_linkedin' => 'url',
        'site_behance' => 'url',
        'site_dribbble' => 'url',
        'site_email' => 'email',
        'site_creator_link' => 'url',
    ];
}
}

This is the form:

@extends('layouts.admin')

@section('content')

<h2>Site settings</h2>

@include('includes._errors')
@include('includes._sessions')

<form action="{{ route('settings.update') }}" method="post">
    @csrf

    <div class="form-group">
        <label for="site_name">Site name</label>
        <input type="text" name="site_name" class="form-control" required placeholder="This field is required!" value="{{ $settings->site_name }}">
    </div>

    <div class="form-group">
        <label for="site_description">Site description</label>
        <textarea name="site_description" class="form-control mytinytext" id="site_description" cols="30" rows="10">{!! $settings->site_description !!}</textarea>
    </div>

    <div class="form-group">
        <label for="site_facebook">Site facebook page</label>
        <input type="text" name="site_facebook" class="form-control" placeholder="https://www.facebook.com/" value="{{ $settings->site_facebook }}">
    </div>

    <div class="form-group">
        <label for="site_instagram">Site instagram page</label>
        <input type="text" name="site_instagram" class="form-control" placeholder="https://www.instagram.com/" value="{{ $settings->instagram }}">
    </div>

    <div class="form-group">
        <label for="site_twitter">Site twitter page</label>
        <input type="text" name="site_twitter" class="form-control" placeholder="https://twitter.com/" value="{{ $settings->site_twitter }}">
    </div>

    <div class="form-group">
        <label for="site_linkedin">Site linkedin page</label>
        <input type="text" name="site_linkedin" class="form-control" placeholder="https://www.linkedin.com/" value="{{ $settings->site_linkedin }}">
    </div>

    <div class="form-group">
        <label for="site_behance">Site behance page</label>
        <input type="text" name="site_behance" class="form-control" placeholder="https://www.behance.net/" value="{{ $settings->site_behance }}">
    </div>

    <div class="form-group">
        <label for="site_dribbble">Site dribbble page</label>
        <input type="text" name="site_dribbble" class="form-control" placeholder="https://dribbble.com/" value="{{ $settings->site_dribbble }}">
    </div>

    <div class="form-group">
        <label for="site_email">Site email</label>
        <input type="text" name="site_email" class="form-control" placeholder="...@outlook... / ...@hotmail... / ...@gmail..." value="{{ $settings->site_email }}">
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_field_one">First footer field title</label>
        <input type="text" name="site_field_one" class="form-control" placeholder="PHONE" value="{{ $settings->site_field_one }}">
    </div>

    <div class="form-group">
        <label for="site_field_one_value">First footer field value</label>
        <textarea name="site_field_one_value" id="site_field_one_value" class="mytinytext form-control" placeholder="+80 (0)5 22 55 66 77">{{ $settings->site_field_one_value }}</textarea>
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_field_two">Second footer field title</label>
        <input type="text" name="site_field_two" class="form-control" placeholder="ADDRESS" value="{{ $settings->site_field_two }}">
    </div>

    <div class="form-group">
        <label for="site_field_two_value">Second footer field value</label>
        <textarea name="site_field_two_value" id="site_field_two_value" class="mytinytext form-control" placeholder="33 rue Burdeau 69089, Paris France">{{ $settings->site_field_two_value }}</textarea>
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_field_three">Third footer field title</label>
        <input type="text" name="site_field_three" class="form-control" placeholder="ENQUIRUES" value="{{ $settings->site_field_three }}">
    </div>

    <div class="form-group">
        <label for="site_field_three_value">Third footer field value</label>
        <textarea name="site_field_three_value" id="site_field_three_value" class="mytinytext form-control" placeholder="[email protected]">{{ $settings->site_field_three_value }}</textarea>
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_field_four">Fourth footer field title</label>
        <input type="text" name="site_field_four" class="form-control" placeholder="WORK HOURS" value="{{ $settings->site_field_four }}">
    </div>

    <div class="form-group">
        <label for="site_field_four_value">Fourth footer field value</label>
        <textarea name="site_field_four_value" id="site_field_four_value" class="mytinytext form-control" placeholder="Weekdays: 09:00 - 18:00  Weekends: 11:00 - 17:00">{{ $settings->site_field_four_value }}</textarea>
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_copyright">Site copyright</label>
        <input type="text" name="site_copyright" class="form-control" placeholder="Created with love by _______ (fill 'Site creator name' field)" value="{{ $settings->site_copyright }}">
    </div>

    <hr class="divider">

    <div class="form-group">
        <label for="site_creator_name">Site creator name</label>
        <input type="text" name="site_creator_name" class="form-control" placeholder="John Doe" value="{{ $settings->site_creator_name }}">
    </div>

    <div class="form-group">
        <label for="site_creator_link">Site creator page</label>
        <input type="text" name="site_creator_link" class="form-control" placeholder="https://site-creator-page.com" value="{{ $settings->site_creator_link }}">
    </div>

    <div class="form-group">
        <button type="submit" name="btn_update_site_settings" class="btn btn-block btn-success">Update site settings</button>
    </div>
</form>

@include('includes._errors')

@endsection

Upvotes: 0

Views: 4864

Answers (1)

Mouad ZIANI
Mouad ZIANI

Reputation: 138

You can use nullable rule

Like the example below:

'site_facebook' => 'url|nullable',

Upvotes: 5

Related Questions