【问题标题】:How to build CodeIgniter URL with hierarchy?如何使用层次结构构建 CodeIgniter URL?
【发布时间】:2013-01-02 16:27:28
【问题描述】:

我知道这与 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,而不会使“项目”控制器膨胀?

【问题讨论】:

  • Routes.php中的路由配置怎么样
  • 看起来可行。没有意识到那是多么的强大。谢谢!您能否将其发布为答案,以便我接受。谢谢!
  • @thephatp 您是否考虑过/project/5/item/12345 项目12345 不属于项目5 的情况?在这种情况下会有什么行为?
  • @jadkik94 是的,我通过设置 $config['url_suffix']='/' 解决了这个问题。效果很好。

标签: codeigniter hierarchy codeigniter-url


【解决方案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 的情况下,在服务器配置中而不是 @987654327 @文件。

【讨论】:

  • 谢谢!我选择了 URI 路由。我已经完成了我想要的操作,并处理了无效的 url 以重定向到索引或方法(如果提供了有效的输入)。非常好。
  • 我正在使用路由文件,但我对锚很生气。在每个锚点中手动编写代表项目 ID 的段是唯一的选择吗?
  • @conca 是的,我想这是唯一的方法,除非你可以使用名称而不是索引(我不确定它是否受支持,你可能想用谷歌搜索)。否则,您可以将所有以project/ 开头的内容发送到项目控制器,如果您需要一些非常复杂的东西,您可以从那里手动进行映射。 (见_remap和$this->uri->segments)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多