darkghosthunter / laradate
Route bind a date into a Carbon (or anything you want)
Fund package maintenance!
Ko Fi
paypal.me/darkghosthunter
Installs: 9
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/darkghosthunter/laradate
Requires
- php: ^8.0
- ext-json: *
- illuminate/http: ^8.0
- illuminate/routing: ^8.0
- illuminate/support: ^8.0
- nesbot/carbon: >=2.51.1
Requires (Dev)
- mockery/mockery: ^1.4.3
- orchestra/testbench: ^6.19
- phpunit/phpunit: ^9.5.8
This package is auto-updated.
Last update: 2022-04-29 01:20:57 UTC
README
Laradate
Parse a date from the URL, receive it as a Carbon instance in your controller.
Requirements
- Laravel 8.x or later
- PHP 8.0 or later.
For older versions support, consider helping by sponsoring or donating.
Installation
You can install the package via composer:
composer require darkghosthunter/laradate
Usage
Simply set the date parameter to any route. In your controller, you will get a Carbon instance if the name of the variable is $date.
use Illuminate\Support\Facades\Route; use Illuminate\Support\Carbon; Route::get('matches/{date}', function (Carbon $date) { return $date; });
A date must be formatted as
YYYY-MM-DDto reach the route, otherwise it won't be found.
Behind the scenes, Laradate will use the DateFactory, which is the default factory in your application, to create instances of DateTimeInterface. By default, your application uses the Carbon library.
If the datetime cannot be parsed, the route will return HTTP 404.
Using formats
You can also use custom formatting for your routes with {date:format}. The format follows the same Datetime formats. If the string doesn't follow the format, the route will return an HTTP 404.
use Illuminate\Support\Facades\Route; use Illuminate\Support\Carbon; // birthdays/2015_07_04 Route::get('birthdays/{date:Y_m_d}', function (Carbon $date) { return $date; });
Because of limitations of Laravel Router parameters for bindings, use underscore
_as separator while using formats.
Date between middleware
To avoid having to fallback to the Laravel Validator inside the controller, you can use the date middleware which accepts a minimum, maximum, or both, dates to compare (inclusive). If the date is not inside the dates, an HTTP 404 code will be returned.
Since the dates are passed to DateTime, you can use words like today 00:00 or 3 months 23:59:59 for relative dates.
use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; Route::post('birthdays/{date}', function (Request $request, Carbon $date) { // ... })->middleware('date:today 00:00,3 months 23:59:59');
Security
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
License
The MIT License (MIT). Please see License File for more information.