【发布时间】:2020-03-24 01:14:03
【问题描述】:
我的基本路线如下所示:
Route::prefix('/group')->group(function () {
// Some routes here
Route::prefix('/{uuid}')->group(function () {
// Some routes here
Route::get('/user/{id}', 'Controller@preview')->name('view-user')->where('id', '[0-9]+');
}
}
逻辑是我希望id 只是数值。我现在要做的是,如果该值是非数字的,则声明对此的重定向。假设id 的输入是fs。在这种情况下,我希望它重定向到 id,值为 1。
我尝试使用Route:redirect,但无法正常工作。它看起来像这样:
Route::redirect('/group/{uuid}/user/{id}', '/group/{uuid}/user/1')->where('id', '[^0-9]+');
我更愿意将重定向放在组内,但如果这是唯一的方法,它也可以放在组外。任何帮助将不胜感激。
发生的情况是,如果我声明了路由重定向,则会收到 404 错误。
编辑:我想在routes/web.php 文件中进行。我知道如何在控制器中执行此操作,但这不是我在当前情况下需要的。
闭包也不是一种选择,因为这会阻止路由缓存。
【问题讨论】:
-
您可以使用Regular Expression Constraints 只允许数值
-
@kerbholz 这确实是个好主意,但在我的情况下它不起作用,因为为了缓存路由,不能有闭包。
-
在 where 子句中使用正则表达式的三元?
-
您可以在 routes/web.py 中创建一个捕获非数字 id 的路由并将其重定向到 id=1 的“view-user”
-
@ege 这正是我想要做的,但我不知道怎么做。如果您能提供代码示例,将不胜感激。