对于我的网站上每一个用户,他们有一个文章列表自己的个人资料页面。 当用户点击列表中的项目之一,动画会发生,然后一个AJAX调用会弹出一个显示的文章一个div。 与此同时,我用一些javascript来强制URL变化来反映这一点:
http://www.example.com/UserName/Hello-World-Article
当用户点击浏览器中的后退按钮,它调用javascript函数动画回到列表视图状态。
到现在为止还挺好。 但是,假设用户输入上述网址到他们的地址栏按下回车,这里的问题:
我如何通过“用户名”和“你好,世界第三”变量纳入笨并在这方面正确地使用它们?
对不起,我是你的问题的措辞混淆一点点,但我想我明白你想谈什么。
第一:阅读对控制器文档 。 笨文档的岩石。
第二: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文件(路径删除项目文档 ):
$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
我可能需要仔细检查这个语法错误,但它的笨路由是如何工作的基本知识。 一旦你的网址是设置这样的,你可以做你希望它与你的JS什么的。
然而 ,我强烈反对这种方法,因为路由一类像这样将几乎呈现应用程序/网站无用的其余部分,除非这是你唯一的控制器/功能(可能并非如此),你有。 我认为你将与刚刚在URL这样或那样有一个类名更好。
或者,你也可以只是如果你想跳过以非传统的方式使用路由指数()和$这个 - > URI->段()像这样。
<?php
class Profile extends CI_Controller {
function index()
{
$username = $this->uri->segment(1);
$title = $this->uri->segement(2);
}
}
我们希望,这是有道理的,并帮助你解决问题。
怎么样发送只有一个参数是分隔符分隔
例
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:确保明智地选择分隔符 ,以便它不是在参数内容之一包括在内。
对于那些谁仍与此挣扎,你可以在笨解决上述问题itself-
控制器
class Mycontroller extends CI_Controller{
public function my_method($arg1, $arg2){
echo $arg1;
echo "<br>";
echo $arg2;
}
}
那么你的URL将被
HTTP://本地主机/ CIProjectFolder / myController的/ my_method /参数1 /参数2