在 Laravel 5.2 中,是否有特定方式(处理程序)来检查路由是否存在?让我们说,对于一个基本的URL,如:
http://www.example.com/laravel
然后我想从我的主页面路由器处理不存在的URL(例如:/laravel
),这是:
Route::get('/{page}', funtion(){
//check if $page is a valid route URL? Or 404?
});
我如何故意检查此路线是否有效?
答案 0 :(得分:3)
只需将Route::get('/{page}','MainController@getPage');
放在最后。这样,如果它在它之前找到另一条路线将使用它,但如果它没有,那么它将被它抓住。例如:
Route::get('/welcome','WelcomeController@getWelcome');
Route::get('/test','TestController@getTest');
Route::get('/{page}','MainController@getPage');
如果你要点击/welcome
或/test
,它应该将它们路由到正确的控制器。如果您点击/hello
的位置,则应转到MainController
并点击getPage($page)
功能,$page
为您点击的页面。
如果它命中MainController@getPage
你知道它基本上是404。
如果您在出于某种原因而在上路之前需要知道,可以创建如下内容:
Route::get('/checkurl/{page}',function($page) {
$exists = Route::has('/' . $page);
return (new Response(json_encode(['exists'=>$exists]),200);
});
答案 1 :(得分:3)
我使用以下作为我的最后路线:
Route::any('{catchall}', function($page) {
abort(404);
} )->where('catchall', '(.*)');
如果您还不知道,abort(404)
将从404.blade.php
返回视图resources/views/errors
。
答案 2 :(得分:0)
使用laravel 5.5.1 +
添加任何捕获的最后路由不再有效