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

时间:2013-05-07 16:51:01

标签: javascript ajax codeigniter

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

http://www.example.com/UserName/Hello-World-Article

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

到目前为止一切顺利。但是,假设用户将上述URL输入其地址栏并按Enter键,这是问题:

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

3 个答案:

答案 0 :(得分:9)

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

首先:阅读Docs on Controllers。 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
        }

     }

这将生成此网址:

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

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

 $route['(:any)'] = 'profile/item/$1';

更好的方法(预读):

 $route['profile/(:any)'] = 'profile/item/$1';

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

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

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

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

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

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

<?php

class Profile extends CI_Controller {

    function index()
    {
        $username = $this->uri->segment(1);
        $title = $this->uri->segement(2);
    }
}

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

答案 1 :(得分:0)

如何只发送一个分隔符分隔的参数

示例

url = http://www.example.com/UserName_title

然后在你的控制器中爆炸参数

class Profile extends CI_Controller {

    function item($param = "")
    {
        if ( $param == ""){ return false; }

        $param = explode('_', $param);
        $username = $param[0];
        $title = $param[1];
    }
 }

有趣的是,您可以根据需要发送任意数量的参数,而无需进行技术处理。

PS:请务必明智地选择分隔符,以使其不包含在其中一个参数内容中。

答案 2 :(得分:0)

对于那些仍在努力解决这个问题的人,你可以在codeigniter本身解决上述问题 -

您的控制器

class Mycontroller extends CI_Controller{
   public function my_method($arg1, $arg2){
     echo $arg1;
     echo "<br>";
     echo $arg2;
   }
}

然后您的网址将

http://localhost/CIProjectFolder/Mycontroller/my_method/argument1/argument2