【问题标题】: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 的外观。

    1. 在您的控制器目录中创建一个页面控制器
    2. 在其中放置一个 _remap 函数以捕获对控制器的所有请求
    3. 如果您使用来自 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 函数的地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        相关资源
        最近更新 更多