如何使用层次结构构建CodeIgniter URL?

时间:2013-01-02 00:01:34

标签: codeigniter hierarchy codeigniter-url

我知道这与www.example.com/class/function/ID/的形式并不完全一致,但我希望向用户展示的内容会更有意义。

这就是我想做的事情:

www.example.com/project/id/item/item_id/

所以,一个例子是:

www.example.com/project/5/item/198237/

这就是行为:

  • www.example.com/project/ - >这将显示项目列表(当前实施)
  • www.example.com/project/5/ - >这将显示项目5(当前实施)的项目列表
  • www.example.com/project/5/item/ - >这并不意味着与上面的行不同。 (这很糟糕吗?)
  • www.example.com/project/5/item/198237/ - >这将显示项目198237的详细信息。

因此,每个项目都只与一个项目直接关联。

我能想到如何做到这一点的唯一方法是膨胀“项目”控制器并解析各种参数并控制来自该“项目”控制器的所有视图。我不想这样做,因为“项目”的模型和视图与“项目”的模型和视图真正分开。

唯一的其他解决方案(我目前正在实施并且不喜欢)是具有以下内容:

www.example.com/project/5/ www.example.com/item/198237 /

有没有办法建立一个分层URL,就像我在开始时展示的那样,没有让“项目”控制器膨胀?

2 个答案:

答案 0 :(得分:1)

有3个选项,根据它们的实用程度排序:

  • 使用URI路由。定义将为每个URL使用特定控制器/方法组合的正则表达式。

这样的事情可以帮助你,routes.php

$route['project/'] = 'project/viewall';
$route['project/(.+)'] = 'project/view/$1';
$route['project/(.+)/item/'] = 'project/view/$1';
$route['project/(.+)/item/(.+)'] = 'item/view/$2';

也就是说,考虑您的控制器分别是项目和项目。另请注意,值中的$n对应于第n个括号中匹配的部分。

  • 使用相同的控制器(或不使用)重定向。我想你已经考虑过了。
  • 在较低级别使用重定向,例如Apache服务器上的ModRewrite。您可以提出类似于routes.php中的规则。如果你已经在使用这样的方法,那么使用它就不是一个坏主意,但只有当你已经在使用这样的东西时,最好是在Apache的情况下,在服务器配置而不是{{ 1}}文件。

答案 1 :(得分:0)

您可以使用routes.php(在config文件夹中找到)来控制所有这些选项。您也可以使用URI类捕获任何URI段,如$this->uri->segment(2)中所示。那就是你加载了URL助手。您可以默认加载autoload.php文件(也在config文件夹中)。