如何检查路由“URL”是否存在?

时间:2016-03-21 14:21:00

标签: php laravel routes

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?
});

我如何故意检查此路线是否有效?

3 个答案:

答案 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 +

添加任何捕获的最后路由不再有效