首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态路由

动态路由
EN

Stack Overflow用户
提问于 2013-01-17 20:10:52
回答 1查看 522关注 0票数 0

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

我有一个类别表和一个子类别表。基本上,我有一个以下格式的网址(:any)/(:any)。第一个通配符是一个城市slug (即edinburgh),第二个通配符是一个类别或子类别的slug。

因此,在我的路径中,我使用该路径搜索类别,如果我找到它,我想使用controller: forsale和method: get_category。如果它不是一个类别,我会查找子类别,如果我在那里找到它,我想使用controller: forsale和method: get_subcategory。如果它不是一个子类别,我想继续寻找其他路线。

代码语言:javascript
运行
复制
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,但是我需要一种方法来区分第二个插件。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 20:34:04

按顺序回答您的问题:

  1. 而不是使用不同的controller#action,您可以使用单个操作,并基于第二个插件(类别或子类别)呈现不同的视图(尽管我不喜欢这种方法,请参阅#2和#3):

代码语言:javascript
运行
复制
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 */);
    }
  }
}

  1. 我认为/city_slug/category_slug/subcategory_slug比你的方法要好得多!你应该使用这个!!
  2. 再次,你应该修改你的路线。我总是试着让我的路线不会让我困惑,Laravel也不会!像/products/city/category/subcategory这样的东西要清晰得多!

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14378799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档