如何在Codeigniter中从URL请求传递多个变量?

adr*_*nmc 1 javascript ajax codeigniter

对于我网站上的每个用户,他们都有自己的个人资料页面,其中包含文章列表.当用户单击其中一个列表项时,会发生一个动画,然后AJAX调用会显示一个显示该文章的div.同时,我使用一些javascript来强制更改URL以反映这一点:

http://www.example.com/UserName/Hello-World-Article
Run Code Online (Sandbox Code Playgroud)

当用户在浏览器中单击后退按钮时,它会调用javascript函数来设置回到listview状态的动画.

到现在为止还挺好.但是,假设用户将上述URL输入到他们的地址栏并按回车,这里是一个问题:

如何将"UserName"和"Hello-World-Article"变量传递给Codeigniter并在此上下文中正确使用它们?

env*_*sea 9

对不起,我对你的问题的措辞感到有点困惑,但我想我明白你要说的是什么.

第一:阅读控制器上文档.Codeigniter文档摇滚.

第二: URI直接路由到控制器类名及其功能.

例如:

<?php

    class Profile extends CI_Controller {

        function item($username = NULL, $title = NULL)
        {
            if (is_null($username) || is_null($title)) redirect(base_url());

            // blah run code where $username and $title = URI segement
        }

     }
Run Code Online (Sandbox Code Playgroud)

这将生成此URL:

 http://www.example.com/profile/item/username/whatever-i-want
Run Code Online (Sandbox Code Playgroud)

然后你可以使用application/config/routes.php(docs)中的路由删除项目:

 $route['(:any)'] = 'profile/item/$1';
Run Code Online (Sandbox Code Playgroud)

更好的方法(预读):

 $route['profile/(:any)'] = 'profile/item/$1';
Run Code Online (Sandbox Code Playgroud)

最后,这将创建您要查找的URL:

http://www.example.com/username/whatever-i-want

//http://www.example.com/profile/username/whatever-i-want
Run Code Online (Sandbox Code Playgroud)

我可能需要仔细检查这一点是否存在语法错误,但这是Codeigniter路由工作原理的基础知识.一旦你的URL设置完毕,你可以用你的JS做任何你想做的事情.

但是,我强烈反对这种方法,因为路由这样的类几乎会使应用程序/站点的其余部分无用,除非这是你唯一的控制器/函数(可能不是这种情况).我认为只要在URL中以这样或那样的方式使用类名,你会更好.

或者,您也可以使用index()和$ this-> uri-> segment(),如果您想以非传统方式跳过路由.

<?php

class Profile extends CI_Controller {

    function index()
    {
        $username = $this->uri->segment(1);
        $title = $this->uri->segement(2);
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这有意义并帮助您解决问题.