1

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

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

当用户在浏览器中单击后退按钮时,它会调用 javascript 函数以动画方式返回到 listview 状态。

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

如何将“UserName”和“Hello-World-Article”变量传递到 Codeigniter 并在这种情况下正确使用它们?

4

3 回答 3

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
        }

     }

这将产生这个 URL:

 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';

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

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

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

我可能需要仔细检查语法错误,但这是 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);
    }
}

希望这是有道理的,可以帮助您解决问题。

于 2013-05-07T17:32:25.510 回答
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:确保明智地选择分隔符,使其不包含在参数内容之一中。

于 2014-07-20T18:15:28.917 回答
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

于 2017-11-24T09:39:50.190 回答