laragear / expire-route
Don't find route models created after a moment in time.
Fund package maintenance!
Github Sponsorship
Paypal
Requires
- php: ^8.1
- illuminate/http: 10.*|11.*
- illuminate/support: 10.*|11.*
Requires (Dev)
- orchestra/testbench: 8.*|9.*
README
Never found models or objects past their expiration time.
use Illuminate\Support\Facades\Route; use App\Models\Payment; use App\Models\Party; Route::get('/payment/{payment}', function (Payment $payment) { // ... })->middleware('expires');
Become a sponsor
Your support allows me to keep this package free, up-to-date and maintainable. Alternatively, you can spread the word!
Usage
The expires
middleware looks for the expired_at
attribute or property for last route parameter. Once found, it checks if the current time is below the value.
use Illuminate\Support\Facades\Route; use App\Models\Payment; Route::get('payment/{payment}', function (Payment $payment) { // ... })->middleware('expires');
If you have multiple route parameters, and you don't want to make the check against the last route parameter, prepend the name of the parameter to the middleware arguments.
use Illuminate\Support\Facades\Route; use App\Models\Payment; use App\Models\Detail; Route::get('payment/{payment}/detail/{detail}', function (Payment $payment, Detail $detail) { // ... })->middleware('expires:payment');
By setting the route parameter, you can use dot.notation
to traverse the object and find the expiration time if it's not the default expired_at
.
use Illuminate\Support\Facades\Route; use App\Models\Payment; use App\Models\Detail; Route::get('payment/{payment}/detail/{detail}', function (Payment $payment, Detail $detail) { // ... })->middleware('expires:payment.dates.due_at');
If your model doesn't have an expiration time, but you want to calculate the expiration time from another attribute, like the created_at
, you may issue a second argument as an expiration time.
If you issue a number, it will be used as the amount of minutes. Any other string will be parsed by strtotime()
.
use Illuminate\Support\Facades\Route; use App\Models\Payment; use App\Models\Detail; use App\Models\Party; Route::get('party/{party}', function (Party $party) { // ... })->middleware('expires:party,60'); Route::get('payment/{payment}/detail/{detail}', function (Payment $payment, Detail $detail) { // ... })->middleware('expires:payment.created_at,24 hours');
Warning
If the property or attribute doesn't exist or returns null
, it will be assumed the model has not expired yet.
Non Eloquent Models
Both middlewares are not limited to only Eloquent Models. It can be any object (even an array) that has a timestamp or a datetime, since the check is done by retrieving the value through data_get()
and then parsed by Laravel's Date Factory.
use Illuminate\Support\Facades\Route; class Thing { public function __construct(public $expiredAt = 'yesterday') { // ... } } Route::bind('thing', fn($value) => new Thing($value)); Route::get('some/{thing}', function (Thing $thing) { // ... })->middleware('expires:thing.expiredAt');
Fluent middleware declaration
You may also use the Expire
middleware to fluently configure it. It's a great way to set relative time expressively.
use Illuminate\Support\Facades\Route; use Laragear\ExpireRoute\Http\Middleware\Expires; Route::get('/payment/{payment}')->middleware(Expires::by('payment')->in(1)->hour()->and(30)->minutes()); Route::get('/payment/{payment}')->middleware(Expires::by('payment')->after('next monday'); Route::get('/payment/{payment}')->middleware(Expires::by('payment.expiration_time'));
Laravel Octane compatibility
- There are no singletons using a stale application instance.
- There are no singletons using a stale config instance.
- There are no singletons using a stale request instance.
- There are no static properties written during a request.
There should be no problems using this package with Laravel Octane.
Security
If you discover any security related issues, please email darkghosthunter@gmail.com instead of using the issue tracker.
License
This specific package version is licensed under the terms of the MIT License, at time of publishing.
Laravel is a Trademark of Taylor Otwell. Copyright © 2011-2024 Laravel LLC.