我想隐藏URL最后两个段但想要在PHP Codeigniter中的控制器方法中访问这些隐藏的段。 这就是我目前所拥有的
somewebsite /的someMethod / dragonhunter2009720pblurayx264ytsag希/ 2/11 和访问
$this->uri->segment('3');
$this->uri->segment('4');
这就是我想拥有的
somewebsite/somemethod/dragonhunter2009720pblurayx264ytsag-greek
但我想在控制器方法中访问这两个隐藏的段值
作为
$this->uri->segment('3');
$this->uri->segment('4');
我该怎么做......
答案 0 :(得分:0)
网址不提供发送“隐藏”数据的任何功能。因此,您无法隐藏网址中的值。
但是你可以使用一个中间类控制器,它会在一个额外的时间内重定向用户:
1。用户请求/subtitles/xy/1/2
请求由以下函数回答:
public function middleware(){
$this->load->library('session');
//Local variables just for easier understanding
$seg2 = $this->uri->segment('2');
$seg3 = $this->uri->segment('3');
$seg4 = $this->uri->segment('4');
//Store the data in a session
$this->session->set_userdata('seg3', $seg3);
$this->session->set_userdata('seg4', $seg4);
redirect('subtitles/'.$seg2);
}
2. Codeigniter设置会话变量并将用户重定向到另一个检索值的函数
public function handleSubtitles(){
$this->load->library('session');
//Retrieve the values from the session library
$seg3 = $this->session->userdata('seg3');
$seg4 = $this->session->userdata('seg4');
//Unset the values
$this->session->unset_userdata('seg3');
$this->session->unset_userdata('seg4');}
}
为了实现此目的,您还需要调整路由配置:application/config/routes.php
$route['subtitles/(:any)'] = "subtitles/handleSubtitles";
$route['subtitles/(:any)/(:any)/(:any)'] = "subtitles/middleware";
但是我会在URL中保留to值...从长远来看,它会让您的工作更轻松。
答案 1 :(得分:0)
我建议您为CI的路由中的每个字幕进行动态路由。为此,打开routes.php(application / config / routes.php)并写下代码: -
require_once( BASEPATH .'database/DB.php' );
$db =& DB();
$query = $db->get('subtitles'); // select the table which have the data and url slug
$result = $query->result();
foreach($result as $r) {
$route['subtitles/'.$r->url_slug] = "subtitles_controller/{$r->url_slug}/{$r->id1}/{$r->id2}";
}
//提示上面的代码: -
您甚至可以在开头没有任何控制器名称的情况下进行路由(没有"字幕")。为此,您可以从路由开头删除字幕。
eg: $route[$r->url_slug] = "subtitles/{$r->url_slug}/{$r->id1}/{$r->id2}";
现在在你的控制器字幕上
function subtitles_controller($slug,$id1,$id2)
// here you can access the variables
}