重新映射Codeigniter控制器

时间:2011-07-08 16:49:16

标签: php codeigniter

我最近一直在玩Codeigniter,我发现你可以在Controller中重新映射一个函数,这样你就可以拥有动态漂亮的URL。
我只是想知道控制器可以做同样的事吗?我的意思是如果我打电话给http://example.com/stack,它会找到一个名为stack的控制器,如果没找到,它会调用一个固定/重新映射的控制器,我可以在那里处理它。
可以这样做吗?

4 个答案:

答案 0 :(得分:3)

也许这可以帮到你:

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;
        }
    }

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

是的,可以通过uri routing实现它。

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

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

比如说,你想将'stack'重新映射到另一个控制器,只需使用:

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

通过这种方式,无论何时访问“堆栈”,它都会自动映射到“othercontroller”,如果不存在,则会出现相同的404错误。 如果您使用.htaccess从URL隐藏index.php,请记住将其插入$config['index_page'] = 'index.php';

如果你想要实现的是一个自定义错误消息,那么当找不到控制器时,只需覆盖@Juris Malinens已经建议的404路由,使用你的自定义默认控制器来处理这种情况

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

答案 3 :(得分:0)

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

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

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

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