Laravel路由重定向与数据

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仅是数值。我现在想做的是,如果该值是非数字的,则声明对此的重定向。假设输入idfs。在那种情况下,我希望它重定向到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文件中做到这一点。我知道如何在控制器中执行此操作,但是在当前情况下这不是我所需要的。关闭也不是一种选择,因为这将阻止路由缓存。

ege*_*ege 3

跟进评论

您可以在 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 线程中看到有关重定向和缓存的更多信息。