M
MeshWorld.
PHP Tutorial Laravel 3 min read

Form Validation For Allowing Only Past Date Or Date Before Today

Vishnu Damwala
By Vishnu Damwala

During development for API or Web App, developers needs to place validation for past date or has below queries:

  • Allow date only before today for example birthday validation during registration
  • Entered date must be less than current date
  • Date must not be greater than today and in specific format
  • Date must not be future date and satisfy date format and so on.

Laravel provides many validation rules and their function which come handy to validate form inputs before storing or updating actual data. Saving lots and lots of developers efforts and resources.

These validation rules are developed in such a way that they are much easy to implement and maintain.

Here we will be creating custom form request class with make:request artisan CLI command that contain out validation logic separate from Controller.

php artisan make:request UserStoreRequest

The newly generated class file UserStoreRequest will be placed in the app/Http/Requests directory. The make:request command will create directory if it does not exists.

One of such is Arr::flatten() which flattens a multi-dimensional array into a single level by default.

Tested with Laravel versions 5.8, 6 and 7.

We need to import Illuminate\Support\Arr namespace with use keyword.

Kindly check for your version on the official DOC for Laravel Helper Arr::flatten(). This link will take you to Laravel 7 Documentation.

Syntax

Arr::flatten(array $array, [int $depth = INF])

Parameters

$array (necessary)

  • The first parameter is necessary and must be an array that needs to be flattened.
  • Laravel will extract elements and provides us with a new single dimension array based on the depth parameter.

$depth (optional)

  • The second parameter specifies the depth and it’s an optional parameter.
  • This value must be an integer type.
  • The depth specifies how deep a nested array should be flattened.
  • The default value for depth is infinity(INF) from which Laravel will extract elements and provides us with a new single dimension array.

Return value

It returns a new 1-D flattened array.

Example

$data = [
    'country' => 'India 🇮🇳',
    'languages' => [
        'Gujarati',
        'Hindi',
        'Sanskrit',
        'Tamil',
        'Urdu',
    ],
];

dd(
	Arr::flatten($data)
);

Output

array:3 [
  0 => "India 🇮🇳"
  1 => "Gujarati"
  2 => "Hindi"
  3 => "Sanskrit"
  4 => "Tamil"
  5 => "Urdu"
]

Deeper Nested Arrays

This method also works on our specified level deep. We simply need to pass the appropriate depth parameter in order to flatten deeper multi-dimensional or nested arrays.

Example with 2 levels deep

$data = [[12, [2, 4], 124, 7, 10, 8, [15, [6, 7]]]];

dd(
    Arr::flatten($data, 2)
);

Output for 2 levels deep

array:9 [
  0 => 12
  1 => 2
  2 => 4
  3 => 124
  4 => 7
  5 => 10
  6 => 8
  7 => 15
  8 => array:2 [
    0 => 6
    1 => 7
  ]
]

Example with INF level deep

$data = [[12, [2, 4], 124, 7, 10, 8, [15, [6, 7]]]];

dd(
    Arr::flatten($data, INF)
);

Output for INF level deep

array:10 [
  0 => 12
  1 => 2
  2 => 4
  3 => 124
  4 => 7
  5 => 10
  6 => 8
  7 => 15
  8 => 6
  9 => 7
]

Resources

Happy 😄 coding

With ❤️ from 🇮🇳