【问题标题】:Remapping Codeigniter Controller重新映射 Codeigniter 控制器
【发布时间】:2013-04-06 19:41:02
【问题描述】:

我最近一直在玩 Codeigniter,我开始知道您可以在 Controller 中重新映射一个函数,这样您就可以拥有动态漂亮的 URL。
我只是想知道控制器也可以这样做吗?我的意思是,如果我调用 http://example.com/stack,它会寻找一个名为 stack 的控制器,如果找不到,它会调用一个固定/重新映射的控制器,我可以处理它。
这个可以吗?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    也许这可以帮助你:

    function _remap( $method )
        {
            /// $method contains the second segment of your URI
            switch( $method )           
            {
                case 'about-me':
                    $this->about_me();
                    break;
    
                case 'successful':
                    $this->display_successful_message();
                    break;
    
                default:
                    $this->page_not_found();
                    break;
            }
        }
    

    【讨论】:

      【解决方案2】:

      是的,可以做到,你可以通过uri routing来实现。

      在您的 application/config/routes.php 中,您可以设置自定义路由以重新映射 URI。
      已经提供了 2 个,默认的一个(如果没有调用控制器)和 404 错误路由。

      现在,如果您想添加自定义路由,只需将它们添加到这 2 个默认值下,记住它们是按照它们呈现的顺序执行的。

      例如,您想将“堆栈”重新映射到另一个控制器,只需使用:

      $routes['stack'] = 'othercontroller';
      

      这样,每当您访问“堆栈”时,它都会自动映射到“其他控制器”,如果不存在..好吧,您会得到相同的 404 错误。 如果您使用 .htaccess 从 URL 中隐藏 index.php,请记住将其插入 $config['index_page'] = 'index.php';

      如果您想要实现的是在找不到控制器时出现自定义错误消息,只需按照@Juris Malinens 的建议覆盖 404 路由,使用您的自定义默认控制器来处理这种情况

      $route['404_override'] = 'customcontroller';
      

      【讨论】:

      • 所以如果我使用404_override,每次找不到控制器时都会调用customcontroller,对吧?
      • @Bibhas 你是对的,先生。它的作用与常规默认消息相同,只是根据您的意愿定制;这很方便。
      【解决方案3】:

      您可以使用 .htaccess 或 config/routes.php- Codeigniter 非常灵活 ;-)

      如果找不到控制器,请使用 $route['404_override'];在 config/routes.php 中

      【讨论】:

        【解决方案4】:

        application/config/routes.php 文件将是执行此操作的合适位置。 Juris 提到的 404_override 仅在 CI 2.x 中可用,以防万一您有旧版本(我不知道,您可能正在使用旧系统,或者将来可能必须这样做)。

        注意,你可以做的不仅仅是“重新映射”控制器。路由接受正则表达式模式,如 htaccess 重写规则;还有一些 CI 模式基本上只是正则表达式的更易于阅读的别名。假设您有一个带有categorysearcharticle 函数的Articles 控制器,您的路由可能如下所示:

        $route["category/(:any)"] = "articles/category/$1";
        $route["search/(:any)"] = "articles/search/$1";
        $route["(:any)"] = "articles/article/$1';
        

        您知道如何使用路由从您的 URL 中完全删除控制器名称吗?如果 URL 没有明确说明它是类别页面或搜索查询,则这些规则将回退到假设该页面是一篇文章。然后,您可以检查是否有该 URL 的文章并根据需要显示 404。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-07
          • 2020-06-13
          • 2019-09-24
          • 1970-01-01
          • 2011-09-02
          • 2020-10-08
          • 2020-03-19
          • 1970-01-01
          相关资源
          最近更新 更多