Laravel路线顺序

时间:2018-07-15 17:55:08

标签: laravel routes

我在Laravel 5的route / web.php文件中设置了一些路由,但是我需要所有其他路由都将使用“ RouterController”。我可以使用这样的东西吗?

Route::get('/','HomeController@index');
Auth::Routes();
.
.
.
Route::get('/{slug}', 'RouterController@process');

这意味着在这种情况下,RouterController将处理上面未定义的每条路由吗?

3 个答案:

答案 0 :(得分:0)

这是正确的,取决于情况。你有正确的想法。无论是否定义路由,所有路由都将由@process处理,具体取决于路由在路由文件中的位置。

如果要处理未定义的路由,则必须将该/ {slug}路由放置在路由文件的最底部。这样,Laravel将首先查看是否定义了路线输入,并为该路线服务。如果不是,那么它将最终进入/ {slug}

不过,我不建议您使用这种方法,说实话,这似乎是一种不好的做法。我认为您最好为resources / views / errors / 404.blade.php创建一个视图,这样,如果未定义路由,则由404错误处理。

答案 1 :(得分:0)

当然,您正在进行全面的路线。您所拥有的唯一问题是,它将仅与具有单个路段的路线匹配:

yoursite.com/anything

但是它将丢失任何超过1个细分的内容:

yoursite.com/anything/else/....

如果您想了解所有内容,则需要使用lil regex来约束路由参数slug的条件:

Route::get('{slug}', 'RouterController@process)->where('slug', '.*');

现在,该路由将捕获任何URL。

路由器上还有一个fallback方法,它将根据您的条件设置此路由:

Route::fallback('yourAction');

答案 2 :(得分:0)

您认为正确的事情。 Laravel从上到下检查在web.php中定义的路由,因此,每当您输入的路由在上一条路由上方定义的路由中都不存在时,输入的路由slug将会传递给process()中的RouterController函数,您可以将逻辑添加到该函数中以执行所需的操作。