0

我目前正在为客户开发 CMS,并且我将使用 Codeigniter 来构建它,它只是一个快速项目,所以我不是在寻找一个强大的解决方案。

要创建页面,我将根据与 mysql 表中的 slug 匹配的 slug 保存页面详细信息并拉取正确的页面。

但是,我的问题是,为了使它起作用,我必须将这个 slug 从控制器的 URL 传递给模型,这意味着我在 URL 中也有我不想要的控制器是否可以删除来自带有路由的 URL 的控制器?

所以

/page/我们的故事

变成

/我们的故事

这可能吗

4

3 回答 3

2

我建议这样做。

假设您有:控制器“页面”/方法“显示”

$route['page/show/:any'] = "$1";

or 方法是我不推荐的索引,如果你有类似新闻的内容,请添加以下内容。

$route['news/show/:any'] = "news/$1";

就是这样。

于 2011-01-22T23:05:54.637 回答
1

是的,当然了。我最近自己构建了一个 Codeigniter 驱动的 CMS。路由的全部目的是改变你的 url 的外观和功能。它可以帮助您摆脱控制器/函数/参数/参数范式,并让您选择您希望 url 的外观。

  1. 在你的控制器目录中创建一个页面控制器
  2. 在其中放置一个 _remap 函数以捕获对控制器的所有请求
  3. 如果您使用来自 Bitbucket 的最新版本的 CI 2.0,那么在您的 routes.php 文件中,您可以将其放在文件的底部:$routes['404_override'] = "pages";然后对不存在的控制器的所有调用都将发送到您的控制器和您然后可以检查是否存在 URL 块。您还应该将页面设置为您的默认控制器值。

请参阅几个月前我在此处对类似问题的回答,以获取我在 Codeigniter CMS 中使用的示例代码和工作代码。

于 2011-01-24T04:41:42.603 回答
0

这是我在最近的一个项目中使用的代码来实现这一点。我从某个地方借来的;不记得在哪里。

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函数的地方。

于 2011-01-20T17:20:19.760 回答