【问题标题】:Codeigniter: send all requests that do not match a controller's name to the default controllerCodeigniter:将所有与控制器名称不匹配的请求发送到默认控制器
【发布时间】:2011-05-29 07:19:15
【问题描述】:

我正在做一个涉及两种 URL 的项目,一种遵循标准 CI 模式

http://fancysite.com/controller/

另一个提出以下方案:

http://fancysite.com/category

我希望第二个以category 作为参数调用默认控制器的handlecategory(或类似的)函数。

如果您还可以告诉我如何让http://place.fancysite.com/ 之类的 URL 调用相同的函数,如果该 URL 后面没有类别,则仅传递 place 作为参数,或者placecategory .

补充数据:我已经知道所有控制器的名称、地点、类别。

【问题讨论】:

标签: php model-view-controller codeigniter url-routing codeigniter-url


【解决方案1】:

您可以使用 codeigniter 的 URI routing 来实现这一点 -

在你的路由文件末尾插入 -

$route[':any'] = 'path of the default controller';

所有其他路由都应该放在上面的代码之上。

假设遇到的 URL codeigniter 是 -

http://fancysite.com/category

所以首先 codeigniter 将搜索是否有一个名为 category 的控制器。 如果它没有得到,那么它将检查路由文件以检查是否存在 像这样指定的任何路线 -

$route['category/:any'] = 'actual path';

如果在这种情况下没有指定这样的路由,codeigniter 将通过这个 请求您在最后一行中提到的默认控制器的路径 路线。

即使链接包含子域,请求也无所谓 相同的默认控制器。

现在您可以为子域处理或其他任何内容插入逻辑 在默认控制器中。

您甚至可以在我们的 url 示例中获取参数 'category',即 在 URL 中使用 codeigniters URI helper 类如下 -

$this->uri->segment(1);

【讨论】:

  • 很好,谢谢!我不得不承认我很懒,应该在问之前仔细阅读文档。为了完整起见,您能否将@Ross 评论整合到您的答案中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2018-02-22
  • 2013-06-12
相关资源
最近更新 更多