laragear/expire-route

不要找到在某个时间点之后创建的路由模型。

v1.0.0 2024-08-27 07:19 UTC

This package is auto-updated.

Last update: 2024-08-27 07:49:21 UTC


README

Latest Version on Packagist Latest stable test run Codecov coverage CodeClimate Maintainability Sonarcloud Status Laravel Octane Compatibility

从未找到过过期时间的模型或对象。

use Illuminate\Support\Facades\Route;
use App\Models\Payment;
use App\Models\Party;

Route::get('/payment/{payment}', function (Payment $payment) {
    // ...
})->middleware('expires');

成为赞助商

您的支持使我能够保持这个包免费、更新和可维护。或者,您也可以 传播这个消息!

用法

expires 中间件会查找最后路由参数的 expired_at 属性或属性。一旦找到,它会检查当前时间是否低于该值。

use Illuminate\Support\Facades\Route;
use App\Models\Payment;

Route::get('payment/{payment}', function (Payment $payment) {
    // ...
})->middleware('expires');

如果您有多个路由参数,并且您不想对最后一个路由参数进行检查,请将参数名称作为中间件参数的起始部分。

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');

通过设置路由参数,您可以使用 dot.notation 来遍历对象,并找到过期时间(如果不是默认的 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');

如果您的模型没有过期时间,但您想从其他属性(如 created_at)计算过期时间,您可能需要提供一个作为过期时间的第二个参数。

如果您提供一个数字,它将用作分钟数。任何其他字符串将被 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');

警告

如果属性或属性不存在或返回 null,则假定模型尚未过期。

非 Eloquent 模型

这两个中间件不仅限于 Eloquent 模型。它可以任何对象(甚至数组),只要它有时间戳或日期时间,因为检查是通过 data_get() 获取的值,然后由 Laravel 的日期工厂解析。

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');

流畅中间件声明

您还可以使用 Expire 中间件来流畅地配置它。这是一种设置相对时间的好方法。

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 兼容性

  • 没有使用过时的应用程序实例的单例。
  • 没有使用过时的配置实例的单例。
  • 没有使用过时的请求实例的单例。
  • 在请求期间没有写入静态属性。

使用 Laravel Octane 时应该没有问题。

安全

如果您发现任何安全问题,请通过电子邮件 darkghosthunter@gmail.com 而不是使用问题跟踪器。

许可协议

此特定包版本在发布时受 MIT 许可协议 的约束。

LaravelTaylor Otwell 的商标。版权 © 2011-2024 Laravel LLC。