Mar*_*rov 5 php routing laravel
我有一条基本路线,如下所示:
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]+');
}
}
Run Code Online (Sandbox Code Playgroud)
逻辑是我希望id仅是数值。我现在想做的是,如果该值是非数字的,则声明对此的重定向。假设输入id是fs。在那种情况下,我希望它重定向到idvalue 1。
我尝试使用Route:redirect,但无法使其正常工作。看起来像这样:
Route::redirect('/group/{uuid}/user/{id}', '/group/{uuid}/user/1')->where('id', '[^0-9]+');
Run Code Online (Sandbox Code Playgroud)
我希望将重定向放入组内,但如果这是唯一的方法,则可以将其置于外部。任何帮助将不胜感激。
如果我声明了路由重定向,将会发生404错误。
编辑:我想在routes/web.php文件中做到这一点。我知道如何在控制器中执行此操作,但是在当前情况下这不是我所需要的。关闭也不是一种选择,因为这将阻止路由缓存。
跟进评论
您可以在 paths/web.php 文件中创建一个捕获非数字 id 的路由,并将其重定向到 id=1 的“view-user”
它看起来像这样
Route::get('/group/{uuid}/user/{id}', function ($uuid, $id) {
return redirect('view-user', ['uuid' => $uuid, 'id' => 1]);
})->where('id', '[^0-9]+');
// and then below have your normal route
Route::get('/group/{uuid}/user/{id}', 'Controller@preview')->name('view-user')->where('id', '[0-9]+');
Run Code Online (Sandbox Code Playgroud)
根据您的评论,您不想使用闭包。
将“错误输入路径”更改为
Route::get('/group/{uuid}/user/{id}', 'Controller@redirectBadInput')->where('id', '[^0-9]+');
Run Code Online (Sandbox Code Playgroud)
然后在类中添加方法Controller:
public function redirectBadInput ($uuid, $id) {
return redirect('view-user', ['uuid' => $uuid, 'id' => 1]);
}
Run Code Online (Sandbox Code Playgroud)
您可以在此 SO 线程中看到有关重定向和缓存的更多信息。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |