在Code Igniter中,我使用的是内置的URL类
我这里有问题。我想将引荐来源网址包含在当前网址中。
示例,localhost / from_referrer / /account/verify/email/b4a98ddd44
/account/verify/email/b4a98ddd44
是我想要包含在当前网址中的网址。
我尝试过urlencode()。看起来像这样
/account/login/from/%2Faccount%2Fverify%2Femail%2Fb4a98ddd44
但它不起作用。 CI假设我想去
/account/login/from//account/verify/email/b4a98ddd44
但我想去
/ account / login / from / /account/verify/email/b4a98ddd44
(突出显示的只是参数)
你们中的任何人都知道如何制作它?
答案 0 :(得分:0)
这是一个想法
尝试使用/
替换-
作为您的推荐人网址
$referrer= str_replace('/', '-', '/account/verify/email/b4a98ddd44');
所以你的网址会变成这样的
account/login/from/-account-verify-email-b4a98ddd44
现在,在您的account controller's
登录功能中,请点击
function login(){
$referrer= str_replace('-','/',$this->uri->segment(4));
}
现在您可以通过多种方式执行此操作,例如您可以对网址进行哈希并附加到您的网址中,但如果您在网址中附加/account/verify/email/b4a98ddd44
CI会将其视为个别参数
account => is the uri segment(4);
verify=> is the uri segment(5);
email=> is the uri segment(6);
b4a98ddd44=> is the uri segment(7);
所以你需要创建一个没有/
的字符串,所以它会出现在一个uri段
希望它有意义
答案 1 :(得分:0)
如果您的网址始终以相同的网段开头,您可以尝试获取数组中的所有网段,并在开头不需要时删除网段。
$segs = $this->uri->segment_array();
unset ($segs[0]); //unset /account
unset ($segs[1]); //unset /login
unset ($segs[2]); //unset /from
$uri = implode('/', $segs);
echo $uri; // echoes "account/verify/email/b4a98ddd44"
另一个可能的解决方案: 这不是你的问题的一个问题,但可能是(beter)解决。
为什么不将http referer与codeigniter flash数据结合使用? 当用户进入登录页面时,在控制器
中设置闪存数据$this->session->set_flashdata("referer",$_SERVER['HTTP_REFERER']);
然后在用户登录后,您可以使用它来再次检索值
$uri = $this->session->flashdata("referer");