在CodeIgniter中创建动态URI

时间:2013-07-20 11:00:25

标签: php codeigniter uri

我有一些网站http://www.example.com,我有一个控制器abc,其中我有方法 index(),它会加载我网站的视图。我已将控制器abc作为默认控制器,以便当用户输入example.com时,他可以直接查看视图。在任何情况下,都无法更改此默认控制器。现在我希望如果用户输入example.com/1234,其中1234是个人资料编号,那么它应该显示该个人资料。如果是example.com/5678,那么它应显示5678的个人资料。我面临的问题是,如果用户输入example.com/1234,那么它将抛出404错误,因为我没有任何控制器1234,即使我检查了我的默认控制器的索引函数if($this->uri->segment(3) == True)它抛出404错误。任何帮助,将不胜感激。

4 个答案:

答案 0 :(得分:2)

在您的路线文件中添加此更改:

$route['(:any)'] = 'abc/index/$1';

然后在abc控制器中:

public function index($profile=NULL)


    {

        $profile = $this->uri->segment(1, 0);

        echo($profile);// just for checking, of course, you will remove this later, + the rest of your code, related to user id

答案 1 :(得分:0)

通常,URL字符串与其对应的控制器类/方法之间存在一对一的关系。 在routes.php(config文件夹)中,您也可以更改defoult控制器和路由。阅读下面的文档中的通配符(secion) 更多信息请阅读documentation

答案 2 :(得分:0)

config / hooks.php 中创建 pre_controller 挂钩。如果您还没有,请记住在 config / config.php 中启用挂钩。

示例:

$hook['pre_controller'][] = array(
                                'class'    => 'Thehook',
                                'function' => 'check_for_profile',
                                'filename' => 'thehook.php',
                                'filepath' => 'hooks'
                                );

然后在 hooks / thehook.php 中创建钩子方法 check_for_profile()。此方法可以检查匹配的配置文件并相应地显示或重定向。如果未找到配置文件匹配项,则可以调用 show_404()方法。

这样,您现有的控制器/方法路径不受影响,并且所有路径都保持不变。

如果您在钩子中重定向,请使用以下格式:

header("Location: controller/method"); 

..而不是

redirect('controller/method');

......因为后者将导致连续循环

答案 3 :(得分:0)

添加routes.php

$route["(.*)"] = 'abc/userid/$1';

然后在主控制器abc add

public function userid()
    {
     $userid=$this->uri->segment(1);
echo ($userid);
    }

现在你在这个函数中有了userid:)