在Laravel中验证路线参数是否大于零

hjqgdpho  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(258)

如何在以下路由中验证{id}是否大于零?

Route::get('/posts/{id}/show', [PostController::class, 'show'])->whereNumber('id');
gab6jxml

gab6jxml1#

按照Laravel 9.x文档,您应该能够执行以下操作:

Route::get('/posts/{id}/show', [PostController::class, 'show'])
    ->where('id', '([1-9]+[0-9]*)');

您可以看到regex适用于number >= 1https://regex101.com/r/MFxO2h/2
检查源代码,您可以看到whereNumbernumber >= 0,这就是0工作的原因。
正如@TimLewis所评论的,你也可以使用Model Binding,它会自动尝试检查你想要的模型是否存在,并在路由上使用参数ID。
在你的例子中,让我们假设{id}Post的ID,那么你的Route应该是这样的:

Route::get('/posts/{post}/show', [PostController::class, 'show']);

然后,您的控制器:

public function show(Request $request, Post $post)
{
   // ...
}

如果没有{post}(id)匹配Post的ID,则404,否则控制器正确地执行方法show

相关问题