2013-01-17 254 views
0

我希望能夠根據從uri收集的數據選擇控制器。動態路由

我有一個分類表和一個子分類表。基本上我有一個以下格式的網址(:any)/(:any)。第一個通配符是一個城市塞爾維亞(即愛丁堡),第二個通配符將是一個類別或一個子類別。

因此,在我的路線中,我搜索具有該路線的類別,如果找到它,我想使用controller:forsale和method:get_category。如果它不是一個類別,我會查找子類別,如果我在那裏找到它,我想使用controller:forsale和method:get_subcategory。如果它不是一個子類別,我想繼續尋找其他路線。

Route::get('(:any)/(:any)', array('as'=>'city_category', function($city_slug, $category_slug){ 
    // is it a category? 
    $category = Category::where_slug($category_slug)->first(); 
    if($category) {  
     // redirect to controller/method 
    } 

    // is it a subcategory? 
    $subcategory = Subcategory::where_slug($category_slug)->first(); 
    if($subcategory) { 
     // redirect to controller/method 
    } 
    // continue looking for other routes 
})); 

首先我不知道如何在這裏調用控制器/方法,而無需實際重定向(因此再次更改URL)。

其次,這是甚至是這樣做的最好方法嗎?我開始使用/city_slug/category_slug/subcategory_slug。但我只想顯示city_slug/category|subcategory_slug,但我需要一種方法來確定第二塊slu is是什麼。

最後,可能會有其他網址在使用中,後面跟着(:any)/(:any),所以我需要它能夠繼續查找其他路線。

回答

1

回答您的問題依次是:
1,而不是使用不同controller#action的,你可以使用一個單一的動作和基於第二蛞蝓(類別或子類別),呈現不同的看法(雖然我不這樣的做法,請參閱#2,#3):

public class Forsale_Controller extends Base_Controller { 
    public function get_products($city, $category_slug) { 
    $category = Category::where_slug($category_slug)->first(); 
    if($category) {  
     // Do whatever you want to do! 
     return View::make('forsale.category')->with(/* pass in your data */); 
    } 

    $subcategory = Subcategory::where_slug($category_slug)->first(); 
    if($subcategory) { 
     // Do whatever you want to do! 
     return View::make('forsale.sub_category')->with(/* pass in your data */); 
    } 
    } 
} 

2.我覺得/city_slug/category_slug/subcategory_slug是遠遠比你的方法好!你應該去這個!
3.同樣,你應該修改你的路線。我總是試圖讓我的路線不會讓我迷惑,既不是Laravel!類似/products/city/category/subcategory更清晰!

希望它有幫助(我的代碼更像是一個psudocode,它沒有經過測試)!