隐藏URL段但想要在PHP Codeigniter中的控制器方法中访问这些段

时间:2018-06-09 08:39:05

标签: php codeigniter

我想隐藏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');

我该怎么做......

2 个答案:

答案 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}";  
 }

//提示上面的代码: -

    1。 $ r-> url_slug: - 使用你的表名称作为slug。
      2。 $ r-> id1和$ r-> id2: - 为两个ID使用您的表名。
        3。 subtitles_controller: - 使用应用程序中正确的控制器名称到您要路由的位置。

        您甚至可以在开头没有任何控制器名称的情况下进行路由(没有"字幕")。为此,您可以从路由开头删除字幕

        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 
        }