【问题标题】:Hide URL Segments But Want To Access These Segments In Controller Method In PHP Codeigniter隐藏 URL 段但想在 PHP Codeigniter 的控制器方法中访问这些段
【发布时间】:2018-06-21 00:26:09
【问题描述】:

我想隐藏 URL 的最后两个段,但想在 PHP Codeigniter 的控制器方法中访问这些隐藏的段。 这是我目前拥有的

一些网站/一些方法/dragonhunter2009720pblurayx264ytsag-greek/2/11 并以身份访问

$this->uri->segment('3');
$this->uri->segment('4');

这就是我想要的

somewebsite/somemethod/dragonhunter2009720pblurayx264ytsag-greek

但我想在控制器方法中访问这两个隐藏段值

作为

$this->uri->segment('3');
$this->uri->segment('4');

我该怎么做...

【问题讨论】:

  • 这种想法背后的原因是什么?我想不出任何需要这种实现的任务......

标签: php codeigniter


【解决方案1】:

URL 不提供任何发送“隐藏”数据的功能。因此,您无法隐藏 url 中的值。

但是,您可以使用中间类控制器,将用户重定向一次:

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 值...从长远来看,这会让您的工作更轻松。

【讨论】:

    【解决方案2】:

    我建议您为 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 :- 使用你的表名作为两个 ids 。
      3。 subtitles_controller:- 使用您的应用程序中的正确控制器名称到您想要路由的位置。

    即使开头没有任何控制器名称(没有“字幕”),您也可以溃败。为此,您可以从路由的开头删除 subtitles

    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 
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      相关资源
      最近更新 更多