- We often encounter scenarios like ticket purchasing queries that require date range validation: the start date must be greater than or equal to today, and the end date must be greater than or equal to the start date.
Version
- Laravel 5.5.40
- PHP 7.1
Implementation Steps
-
Create a Form Request:
Laravel
Note: Remember to returntrue
in theauthorize()
method since we’re handling authentication elsewhere -
Special validation challenge:
Initial attempt to validatestart_date
using an extra field:
Laravel
Testing shows this approach doesn’t work as expected -
Debugging reveals the validation data is captured before custom rules:
Laravel
Laravel -
Solution: Override
prepareForValidation()
Laravel
This ensurescurr_date
is available during validation
Technical Analysis
- IoC Container handles dependency injection for form requests
- Validation Workflow:
prepareForValidation()
(custom preparation)- Create validator instance with current request data
- Execute validation rules
- Key implementation detail:
protected function prepareForValidation() { $this->merge(['curr_date' => date('Y-m-d')]); }
- Alternative approach using built-in
today
keyword:'start_date' => 'required|date|after_or_equal:today',
Leverages PHP’s
strtotime()
recognition of “today”
Validation Flowchart
graph TD
A[Request Initiated] --> B[Resolve FormRequest]
B --> C[Prepare Validation Data]
C --> D[Execute Validation Rules]
D --> E{Validation Pass?}
E -->|Yes| F[Process Request]
E -->|No| G[Return Validation Errors]
This approach ensures robust date validation while maintaining Laravel’s elegant syntax and validation capabilities.