laragear / expire-route
不要找到在某个时间点之后创建的路由模型。
v1.0.0
2024-08-27 07:19 UTC
Requires
- php: ^8.1
- illuminate/http: 10.*|11.*
- illuminate/support: 10.*|11.*
Requires (Dev)
- orchestra/testbench: 8.*|9.*
README
从未找到过过期时间的模型或对象。
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 许可协议 的约束。
Laravel 是 Taylor Otwell 的商标。版权 © 2011-2024 Laravel LLC。