Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5.6 Date of Birth Validation [duplicate]

Tags:

php

laravel

I created validation rules in my Member Model with date of birth NOT being required. However, when someone does fill in their date of birth, I want it to be 1. in the correct format and 2. the date cannot be a date in the future.

However, when I fill out my form and leave date of birth empty, I still get the following error:

enter image description here

Here my basic Member.php model:

use Esensi\Model\Model;

class Member extends Model
{
    protected $rules = [
        'name' => 'required|alpha|min:2|max:255',
        'surname' => 'required|alpha|min:2|max:255',
        'id_number' => 'required|unique:members,id_number|digits:13',
        'mobile_number' => 'required|digits:10',
        'email' => 'required|email',
        'date_of_birth' => 'date_format:Y-M-D|before:today',
    ];
}

Here's my MemberController.php store function:

public function store(Request $request) 
{
    $member = new Member;
    $member->name = $request->name;
    $member->surname = $request->surname;
    $member->id_number = $request->id_number;
    $member->mobile_number = $request->mobile_number;
    $member->email = $request->email;
    $member->date_of_birth = $request->date_of_birth;

    if(!$member->save()){
        $errors = $member->getErrors();

         return redirect()
            ->action('MemberController@create')
            ->with('errors', $errors)
            ->withInput();
}
//successful creation
    return redirect()
        ->action('MemberController@index')
        ->with('message', '<div class="alert alert-success">Member Created Successfully!</div>');

}

How do I fix it so that date of birth only shows an error when the field is actually filled in but the formatting is incorrect?

like image 692
jproux Avatar asked Oct 25 '25 22:10

jproux


2 Answers

Here you will find the date rules for different conditions:

$v = Validator::make(
  ['start_date' => date('30-05-2028')], // input
  [
    'date_of_birth' => ['before:5 years ago'],
    'start_date'    => 'required|date_format:d-m-Y|after:8 years',
    'end_date'      => 'date_format:d-m-Y|after:start_date', 
    ]
);

if ($v->passes())
 dd('Your Date format is correct.');
else
 dd($v->errors());

For your case you should try:

'date_of_birth' => 'date_format:Y-m-d|before:today|nullable'

Careful: You must use this Y-m-d format. Not this Y-M-D. Month and Date parameter must be in lower case. Hope it will solve your issues.

like image 116
Md Riadul Islam Avatar answered Oct 27 '25 10:10

Md Riadul Islam


'date_of_birth' => 'nullable|date_format:Y-m-d|before:today',
like image 25
Erkan Özkök Avatar answered Oct 27 '25 11:10

Erkan Özkök