3

我知道这与 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,就像我在开始时展示的那样,而不会使“项目”控制器膨胀?

4

2 回答 2

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 个括号中匹配的部分。

  • 使用带(或不带)重定向的相同控制器。我想你已经考虑过了。
  • 在较低级别使用重定向,例如ModRewrite在 Apache 服务器上。你可以想出一个类似的规则routes.php。如果您已经在使用这种方法,那么使用它并不是一个坏主意,但前提是您已经在使用这种方法,并且最好在 Apache 的情况下,在服务器配置中而不是在.htaccess文件中。
于 2013-01-02T08:27:28.780 回答
0

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

于 2013-01-02T07:31:43.060 回答