2014-10-20 79 views
1

在Laravel 4中讓我說我有這兩條路線。第一條路線在數據庫中尋找一個slu and,如果沒有找到slu go,則轉到其他路線。這是可能的,我將如何使其工作?Laravel 4路線調節

Route::get('{slug}', '[email protected]'); 
Route::get('/about', '[email protected]'); 
+0

如果在數據庫中找不到slu You,您必須在'SlugController @ getBySlug'中檢查並重定向到'AboutController @ index'。 – Jerodev 2014-10-20 14:27:32

+0

在我看來,你想要的東西根本不是(可以)用laravel輕鬆實現的。我沒有詳細看它,但也許你想給[這個軟件包](https://github.com/cviebrock/eloquent-sluggable)試一試 – lukasgeiter 2014-10-20 14:37:02

+0

澄清:是否有可能是一個綽號「約」存在? – lukasgeiter 2014-10-20 14:50:34

回答

0

您可以讓路由獲取URL上的任何內容,並且您可以檢查它是否存在。

如果蛞蝓存在,不僅僅是打電話[email protected]

如果塞不存在,它被設置爲任何旁邊「大約」,比我們會重定向到同一條路線與約設爲蛞蝓參數所以下一次,在你的數據庫中沒有記錄,在路線上的slu is大概是slu about。

希望是有道理的。

Route::get('{slug}', function($slug){ 
    //Check if slug exists, if yes than do 
    $slug_exists = true; 
    if($slug_exists){ 
     return Controller::call("[email protected]"); 
    }else if(!$slug_exists && $slug == 'about'){ 
     return Controller::call("[email protected]"); 
    }else{ 
     return Redirect::to("/about"); 
    } 
}); 
+0

我真的想要一些跳過路線的方法,但看起來目前還不可能。如果我需要它,我會像你所建議的那樣使用它。謝謝 – Livyatan 2014-10-21 08:48:31

+0

@Livyatan使用此解決方案或覆蓋路線沒有區別。如果這可以幫助你,請將其標記爲正確答案。 – Burimi 2014-10-21 10:25:40

1

在你的控制器,檢查你的對象的存在後,如果需要返回重定向到你的第二個途徑。

class SlugController extends BaseController { 

    public function getBySlug($slug) { 
     $obj = getObjectBySlug($slug); 
     if (!obj) { 
      return Redirect::to("/about"); 
     } 
    } 

} 
+0

但是如果輸入的網址是「/ about」。如果在db中不存在循環,則會得到一個循環 – lukasgeiter 2014-10-20 14:31:58

+0

如果用戶輸入'/ about',則它們被路由到另一個方法而不是'SlugController @ getBySlug'! – 2014-10-20 14:38:07

+0

如果使用OP提供的路線,則不應該。他的'{slug}'路線只是抓住了一切。 – lukasgeiter 2014-10-20 14:40:08

1

如果你只是想使用靜態about頁,你需要在你的路由的這種情況下,變更指令:

Route::get('/about', '[email protected]'); 
Route::get('{slug}', '[email protected]'); 

現在,如果網址是about就會去AboutController,否則會到SlugController