我一直在尝试使用Codeigniter创建一个电子商务网站,并且正在尝试执行以下操作:

将类别名称作为第一个参数,例如

  • /tshirts
  • /shoes

  • 每个过滤器后面的过滤器(在类别上)或产品(在SEO的URL中带有类别)
  • /tshirts/filter/price/0-20
  • /tshirts/pink-with-blue-spots

  • 我目前在路由中执行的操作是:
    $route['tshirts']                    = 'category/index';
    $route['tshirts/(filter|sort)']      = 'category/index';
    $route['tshirts/(filter|sort)/:any'] = 'category/index/filter';
    $route['tshirts/:any']               = 'product/index';
    

    我想将前两行合并为一个,因为它们正在访问相同的 Controller 和方法。

    第二行是在有人删除/filter/之后的零件的情况下出现的,并且有可能与其他路线合并。

    最后一条路线表示第二个参数是产品名称,因此必须传递给产品 Controller 。

    我一直在使用http://gskinner.com/RegExr/并提出以下内容(可能很接近),认为我只需要使方括号中的部分为可选(它选择了正确的路线,除了没有任何第二个参数的路线之外),但是我我不确定该怎么做。
    category/?(filter|sort|page)
    

    谢谢!

    最佳答案

    我对CodeIgniter路由的语法不熟悉。但是尝试一下:

    $route['tshirts(/(filter|sort))?']      = 'category/index';
    

    并且如果支持非捕获组:
    $route['tshirts(?:/(filter|sort))?']      = 'category/index';
    

    10-06 03:11