我在Laravel 5的route / web.php文件中设置了一些路由,但是我需要所有其他路由都将使用“ RouterController”。我可以使用这样的东西吗?
Route::get('/','HomeController@index');
Auth::Routes();
.
.
.
Route::get('/{slug}', 'RouterController@process');
这意味着在这种情况下,RouterController将处理上面未定义的每条路由吗?
答案 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
函数,您可以将逻辑添加到该函数中以执行所需的操作。