Php 重映射编码点火器控制器
我最近一直在玩Codeigniter,我知道可以在控制器中重新映射函数,这样就可以拥有动态的漂亮URL。Php 重映射编码点火器控制器,php,codeigniter,Php,Codeigniter,我最近一直在玩Codeigniter,我知道可以在控制器中重新映射函数,这样就可以拥有动态的漂亮URL。 我只是想知道控制器也能做到这一点吗?我是说如果我打电话给http://example.com/stack,它将查找名为堆栈的控制器,如果找不到,它将调用一个固定/重新映射的控制器,在那里我可以处理它。 可以这样做吗?您可以使用.htaccess或config/routes.php-Codeigniter非常灵活;-) 如果找不到控制器,请使用$route['404_override'];在c
我只是想知道控制器也能做到这一点吗?我是说如果我打电话给
http://example.com/stack
,它将查找名为堆栈的控制器,如果找不到,它将调用一个固定/重新映射的控制器,在那里我可以处理它。
可以这样做吗?您可以使用.htaccess或config/routes.php-Codeigniter非常灵活;-)
如果找不到控制器,请使用$route['404_override'];在config/routes.php中,您可以使用.htaccess或config/routes.php执行此操作,Codeigniter非常灵活;-)
如果找不到控制器,请使用$route['404_override'];在config/routes.php中是的,这可以完成,您可以使用
在应用程序/config/routes.php
中,可以将自定义路由设置为重新映射URI。
已经提供了2个,默认的一个(在没有调用控制器的情况下)和404错误路由
现在,如果要添加自定义路由,只需在这两个默认值下添加它们,记住它们是按显示顺序执行的
例如,如果要将“堆栈”重新映射到另一个控制器,只需使用:
$routes['stack'] = 'othercontroller';
这样,每当您访问“stack”时,它将自动映射到“othercontroller”,如果它不存在,那么您将得到相同的404错误。
如果使用.htaccess从URL隐藏index.php,请记住将其插入$config['index_page']='index.php'代码>
如果您试图实现的是在找不到控制器时的自定义错误消息,则只需按照@Juris Malinens的建议覆盖404路由,使用自定义默认控制器来处理该情况
$route['404_override'] = 'customcontroller';
是的,这是可以做到的,你可以通过使用
在应用程序/config/routes.php
中,可以将自定义路由设置为重新映射URI。
已经提供了2个,默认的一个(在没有调用控制器的情况下)和404错误路由
现在,如果要添加自定义路由,只需在这两个默认值下添加它们,记住它们是按显示顺序执行的
例如,如果要将“堆栈”重新映射到另一个控制器,只需使用:
$routes['stack'] = 'othercontroller';
这样,每当您访问“stack”时,它将自动映射到“othercontroller”,如果它不存在,那么您将得到相同的404错误。
如果使用.htaccess从URL隐藏index.php,请记住将其插入$config['index_page']='index.php'代码>
如果您试图实现的是在找不到控制器时的自定义错误消息,则只需按照@Juris Malinens的建议覆盖404路由,使用自定义默认控制器来处理该情况
$route['404_override'] = 'customcontroller';
application/config/routes.php文件将是执行此操作的适当位置。Juris提到的404_覆盖仅在CI 2.x中可用,以防您使用较旧的版本(我不知道,您可能正在使用遗留系统,或者将来可能不得不使用)
注意,使用此选项,您可以做的不仅仅是“重新映射”控制器。路由接受正则表达式模式,如htaccess重写规则;还有一些CI模式,它们基本上只是正则表达式的更具可读性的别名。假设您有一个带有类别
、搜索
和文章
功能的文章
控制器,您可能有如下路径:
$route["category/(:any)"] = "articles/category/$1";
$route["search/(:any)"] = "articles/search/$1";
$route["(:any)"] = "articles/article/$1';
您看到如何使用路由从URL中完全删除控制器名称了吗?如果URL没有明确指出该页面是类别页面或搜索查询,则这些规则将退回到假设该页面是文章的情况。然后,您可以检查是否有关于URL的文章,并根据需要显示404。应用程序/config/routes.php文件将是执行此操作的适当位置。Juris提到的404_覆盖仅在CI 2.x中可用,以防您使用较旧的版本(我不知道,您可能正在使用遗留系统,或者将来可能不得不使用)
注意,使用此选项,您可以做的不仅仅是“重新映射”控制器。路由接受正则表达式模式,如htaccess重写规则;还有一些CI模式,它们基本上只是正则表达式的更具可读性的别名。假设您有一个带有类别
、搜索
和文章
功能的文章
控制器,您可能有如下路径:
$route["category/(:any)"] = "articles/category/$1";
$route["search/(:any)"] = "articles/search/$1";
$route["(:any)"] = "articles/article/$1';
您看到如何使用路由从URL中完全删除控制器名称了吗?如果URL没有明确指出该页面是类别页面或搜索查询,则这些规则将退回到假设该页面是文章的情况。然后,您可以检查是否有该URL的文章,并根据需要显示404。也许这可以帮助您:
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;
}
}
也许这可以帮助你:
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;
}
}
所以如果我使用404_覆盖,每次找不到控制器时都会调用customcontroller,对吗?@Bibhas你说得对,先生。它的作用与常规默认消息相同,只是根据您的意愿定制;这很方便。所以如果我使用404_覆盖,每次找不到控制器时都会调用customcontroller,对吗?@Bibhas你说得对,先生。它的作用与常规默认消息相同,只是根据您的意愿定制;它很方便。