【问题标题】:codeigniter routing代码点火器路由
【发布时间】:2011-01-20 17:00:49
【问题描述】:
我目前正在为客户开发 CMS,并且我将使用 Codeigniter 进行构建,它只是一个快速项目,所以我不是在寻找一个强大的解决方案。
要创建页面,我将根据与 mysql 表中的 slug 匹配的 slug 保存页面详细信息并拉取正确的页面。
但是,我的问题是,为了使它起作用,我必须将这个 slug 从控制器的 URL 传递到模型,这意味着我在 URL 中也有我不想要的控制器是否可能使用路由从 URL 中删除控制器?
所以
/page/我们的故事
变成
/我们的故事
这可能吗
【问题讨论】:
标签:
php
codeigniter
routes
codeigniter-url
【解决方案1】:
我建议这样做。
假设你有:控制器“页面”/方法“显示”
$route['page/show/:any'] = "$1";
or method 是 index 我不推荐,如果你有新闻之类的,添加以下内容。
$route['news/show/:any'] = "news/$1";
就是这样。
【解决方案2】:
是的,当然。我最近自己构建了一个 Codeigniter 驱动的 CMS。路由的全部目的是改变你的 url 的外观和功能。它可以帮助您摆脱控制器/函数/参数/参数范式,并让您选择您希望 url 的外观。
- 在您的控制器目录中创建一个页面控制器
- 在其中放置一个 _remap 函数以捕获对控制器的所有请求
- 如果您使用来自 Bitbucket 的最新版本的 CI 2.0,则可以在您的 routes.php 文件中将其放在文件底部:
$routes['404_override'] = "pages";,然后对不存在的控制器的所有调用将是发送到您的控制器,然后您可以检查是否存在 URL 块。您还应该将页面设置为默认控制器值。
请参阅几个月前我对 similar question here 的回答,了解我在 Codeigniter CMS 中使用的示例代码和工作代码。
【解决方案3】:
这是我在最近的一个项目中用于实现此目的的代码。我从某个地方借来的;不记得在哪里了。
function _remap($method)
{
$param_offset = 2;
// Default to index
if ( ! method_exists($this, $method))
{
// We need one more param
$param_offset = 1;
$method = 'index';
}
// Since all we get is $method, load up everything else in the URI
$params = array_slice($this->uri->rsegment_array(), $param_offset);
// Call the determined method with all params
call_user_func_array(array($this, $method), $params);
}
那么,我的 index 函数就是你要放置 page 函数的地方。