【问题标题】:CodeIgniter RoutingCodeIgniter 路由
【发布时间】:2010-11-20 06:28:44
【问题描述】:

我正在使用 CI 开发一个电子商务网站,其中包含产品类别和产品。我想路由 URL 以便它转到产品控制器,然后为第一段运行 getCategoryByName 函数,然后为第二段运行 getProductByName。这是我所拥有的:

网址: 产品/docupen/rc805 路线.php: $route['products/([a-z]+)'] = "products/getCategoryByName/$1"; $route['products/([a-z]+)/([a-z0-9]+)'] = "products/$1/getProductByName/$2";

但它不起作用。 “docupen”是类别,“rc805”是产品。

提前致谢。


感谢大家的帮助。这就是我最终得到的结果。

$route['products/:any/:num'] = "products/getProductByID"; $route['products/:any/:any'] = "products/getProductByName"; $route['products/:any'] = "products/getCategoryByName";

【问题讨论】:

    标签: php regex http codeigniter routing


    【解决方案1】:

    我的回答有点基于 Colin 的回答。

    当我在 CodeIgniter 中使用路由时,我得出结论,路由的顺序很重要。当它找到第一个有效路线时,它不会执行列表中的其他路线。如果它没有找到任何有效的路由,那么它将处理默认路由。

    我在特定项目中使用的路线如下:

    $route['default_controller'] = "main";
    $route['main/:any'] = "main";
    $route['events/:any'] = "main/events";
    $route['search/:any'] = "main/search";
    $route['events'] = "main/events";
    $route['search'] = "main/search";
    $route[':any'] = "main";
    

    如果我输入“http://localhost/index.php/search/1234/4321”,它将被路由到主/搜索,然后我可以使用$this->uri->segment(2); 检索1234

    在您的情况下,我会尝试(顺序非常重要):

    $route['products/:any/:any'] = "products/getProductByName";
    $route['products/:any'] = "products/getCategoryByName";
    

    我不知道如何按照您想要的方式路由 (products/$1/getProductByName/$2),但我不确定您将如何创建一个控制器来处理这种特殊形式的 URI。使用 Colin 在控制器中提到的 $this->uri->segment(n); 语句,您应该能够做您想做的事。

    【讨论】:

      【解决方案2】:

      您应该使用URI class 从您的网址中检索“docupen”和“rc805”段。然后,您可以在所需的任何函数中使用这些值。

      例如,如果您的网址是 www.yoursite.com/products/docupen/rc805,您将在产品控制器中使用以下内容来检索细分并将它们分配给变量:

      $category = $this->uri->segment(2); //docupen
      $product = $this->uri->segment(3); //rc805
      

      然后您可以根据需要使用 $category 和 $product。

      【讨论】:

        【解决方案3】:

        CodeIgniter 路由不适用于正则表达式。他们得到支持,而不是我永远无法让他们工作。像这样抓住它们会容易得多

        $route['products/(:any)'] = "products/getCategoryByName/$1";
        $route['products/(:any)/(:any)'] = "products/$1/getProductByName/$2";
        

        【讨论】:

          猜你喜欢
          • 2011-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-20
          • 1970-01-01
          相关资源
          最近更新 更多