如何在以下路由中验证{id}是否大于零?
Route::get('/posts/{id}/show', [PostController::class, 'show'])->whereNumber('id');
gab6jxml1#
按照Laravel 9.x文档,您应该能够执行以下操作:
Route::get('/posts/{id}/show', [PostController::class, 'show']) ->where('id', '([1-9]+[0-9]*)');
您可以看到regex适用于number >= 1:https://regex101.com/r/MFxO2h/2检查源代码,您可以看到whereNumber是number >= 0,这就是0工作的原因。正如@TimLewis所评论的,你也可以使用Model Binding,它会自动尝试检查你想要的模型是否存在,并在路由上使用参数ID。在你的例子中,让我们假设{id}是Post的ID,那么你的Route应该是这样的:
number >= 1
whereNumber
number >= 0
0
{id}
Post
Route::get('/posts/{post}/show', [PostController::class, 'show']);
然后,您的控制器:
public function show(Request $request, Post $post) { // ... }
如果没有{post}(id)匹配Post的ID,则404,否则控制器正确地执行方法show。
{post}
404
show
1条答案
按热度按时间gab6jxml1#
按照Laravel 9.x文档,您应该能够执行以下操作:
您可以看到regex适用于
number >= 1
:https://regex101.com/r/MFxO2h/2检查源代码,您可以看到
whereNumber
是number >= 0
,这就是0
工作的原因。正如@TimLewis所评论的,你也可以使用Model Binding,它会自动尝试检查你想要的模型是否存在,并在路由上使用参数ID。
在你的例子中,让我们假设
{id}
是Post
的ID,那么你的Route应该是这样的:然后,您的控制器:
如果没有
{post}
(id)匹配Post的ID,则404
,否则控制器正确地执行方法show
。