2016-03-21 48 views
0

Laravel 5.2,有沒有一種特殊的方法(處理程序)來檢查路線是否存在?比方說,一個基本的URL,如:如何檢查路線「URL」是否存在?

http://www.example.com/laravel 

然後我要處理的不存在的網址(如:/laravel)從我的主頁路由器,它是:

Route::get('/{page}', funtion(){ 
    //check if $page is a valid route URL? Or 404? 
}); 

我如何故意檢查這條路線是否有效?

+0

hopw about Route :: has('route.name'); –

+0

你的意思是'Route :: has('route.laravel')'根據上面的示例路線嗎? –

+1

您的意思是:1)檢查路由別名是否已被使用;或2)檢查給定的URL是否與您的某條路線相匹配? –

回答

3

只需將您的Route::get('/{page}','[email protected]');放在最後。這樣,如果在它將使用它之前發現另一條路線,但是如果它沒有,那麼它將被這個抓住。例如:

Route::get('/welcome','[email protected]'); 
Route::get('/test','[email protected]'); 
Route::get('/{page}','[email protected]'); 

如果你打/welcome/test它應該路由至正確的控制器。如果你在哪裏擊中/hello它應該去MainController並點擊功能getPage($page)$page是你打的頁面。

如果它擊中[email protected]你知道這基本上是一個404

如果你需要知道你打出於某種原因,你可以創建這樣的路徑前:

Route::get('/checkurl/{page}',function($page) { 
    $exists = Route::has('/' . $page); 
    return (new Response(json_encode(['exists'=>$exists]),200); 
}); 
3

我用的是以下是我最後的路線:

Route::any('{catchall}', function($page) { 
    abort(404); 
})->where('catchall', '(.*)'); 

如果你不知道的是,abort(404)將從返回視圖。

+0

到目前爲止好。這看起來是最好的選擇 – mojoblanco

0

添加最後一條路線與任何漁獲物不再適用於laravel 5.5.1+