Php 重映射编码点火器控制器

Php 重映射编码点火器控制器,php,codeigniter,Php,Codeigniter,我最近一直在玩Codeigniter,我知道可以在控制器中重新映射函数,这样就可以拥有动态的漂亮URL。 我只是想知道控制器也能做到这一点吗?我是说如果我打电话给http://example.com/stack,它将查找名为堆栈的控制器,如果找不到,它将调用一个固定/重新映射的控制器,在那里我可以处理它。 可以这样做吗?您可以使用.htaccess或config/routes.php-Codeigniter非常灵活;-) 如果找不到控制器,请使用$route['404_override'];在c

我最近一直在玩Codeigniter,我知道可以在控制器中重新映射函数,这样就可以拥有动态的漂亮URL。
我只是想知道控制器也能做到这一点吗?我是说如果我打电话给
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你说得对,先生。它的作用与常规默认消息相同,只是根据您的意愿定制;它很方便。