检查路由参数是否为特定值?

Checking route parameters are a specific value?

我的路线:

Route::get('/{type?}/{filter?}', [IndexController::class, 'index']);

有没有一种方法,比如表单请求,我可以在其中检查 $type$filter 是否为特定值,例如 $filter 等于 new 或也许 trending?

我考虑过将有限数量的选项指定为路由本身:

Route::get('/books/new', [IndexController::class, 'index']);

但是我无法在控制器中获取这些参数。请注意,我不希望每个 $type.

都有单独的控制器

您可以将路由参数限制为正则表达式,如in the documentation所述。

Route::get('/{type?}/{filter?}', [IndexController::class, 'index'])
    ->where(['filter' => '^(new|trending)$']);

但我认为将此逻辑集中在您的控制器中更有意义:

public function index(string $type, string $filter)
{
    switch ($type) {
        case "books":
            // do something
            break;
        case "films":
            // do something
            break;
        default:
            abort(404);
    }
}