Laravel中的破折号路线

时间:2018-07-15 05:02:01

标签: laravel routes

我有一条简单的路线,像这样:

Route::get('/{name}-{id}', function($name, $id){
    return view('hello', compact('name', 'id'));
});

我有一个网址:example.com/hello-world-1234 Laravel在处理此路线时遇到问题。它会将“ hello”检测为name,将“ world-1234”检测为id

如果我使用htaccess进行路由,则不会发生这种情况:

RewriteRule ^([^/]+)-([^/]+)/?$ hello.php?name=$1&id=$2 [QSA,L]

htaccess正确地将“ hello-world”检测为name,将“ 1234”检测为id。 如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在这里,尝试将此作为您的代码。它应该正确识别所需的名称和ID。

    Route::get('/{name}-{id}', function($name, $id){
    return view('hello', compact('name', 'id'));
})->where(['name' => '^([^\/]+)', 'id' => '([^\/]+)\/?$']);

答案 1 :(得分:0)

我正在考虑正则表达式https://laravel.com/docs/5.6/routing#parameters-regular-expression-constraints, 但是您的id是不固定的,就像id = world-1234一样,我认为很难做到这一点,可以将-替换为.吗?