0

我希望能够根据从 uri 收集的数据选择控制器。

我有一个类别表和一个子类别表。基本上我有一个以下格式的 URL (:any)/(:any)。第一个通配符是城市蛞蝓(即爱丁堡),第二个通配符将是一个类别或子类别的蛞蝓。

因此,在我的路线中,我使用该路线搜索类别,如果找到,我想使用控制器:forsale 和方法:get_category。如果它不是一个类别,我会查找子类别,如果我在那里找到它,我想使用控制器:forsale 和方法: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,但我需要一种方法来判断第二个蛞蝓是哪一个。

最后,(:any)/(:any) 后面可能还有其他正在使用的 URL,所以我需要它才能继续寻找其他路由。

4

1 回答 1

1

按顺序回答您的问题: 1.您可以使用单个操作并基于第二个 slug(类别或子类别),
而不是使用不同的 's,呈现不同的视图(尽管我不喜欢这种方法,请参阅 #2controller#action和#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的东西更清楚!

希望它有所帮助(我的代码更像是一个伪代码,它没有经过测试)!

于 2013-01-17T12:34:04.000 回答