我最近一直在玩Codeigniter,我发现你可以在Controller中重新映射一个函数,这样你就可以拥有动态漂亮的URL。
我只是想知道控制器可以做同样的事吗?我的意思是如果我打电话给http://example.com/stack
,它会找到一个名为stack
的控制器,如果没找到,它会调用一个固定/重新映射的控制器,我可以在那里处理它。
可以这样做吗?
答案 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
控制器,其中包含category
,search
和article
个函数,您的路径可能如下所示:
$route["category/(:any)"] = "articles/category/$1";
$route["search/(:any)"] = "articles/search/$1";
$route["(:any)"] = "articles/article/$1';
您了解如何使用路由从您的网址中完全删除控制器名称?如果URL没有明确说明它是类别页面或搜索查询,则这些规则将回退到假设页面是文章。然后,您可以检查是否有关于URL的文章并根据需要显示404。