slug在codeigniter中无法正常工作

时间:2015-11-25 08:03:07

标签: php codeigniter

我在codeigniter中创建了带有slug的页面。但是如果我的数据库中的slug有斜线,它就无法工作。

喜欢 - :

1)con_r / this // not working

2)con_q //工作

3)con_r / this / that // not working

看看我的代码

routes.php文件

$route['default_controller'] = "home";
$route['404_override'] = 'home';
$route['translate_uri_dashes'] = TRUE;

require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->get('slugu');
$result = $query->result();
foreach( $result as $row ){
    $route[ $row->slug ] = 'page/call/'.$row->slug;
}

页面 //控制器

 public function call($slug){

    $data['page_base'] = $this->site_model->get_page_info($slug);

    /*call slider*/
    echo $this->call_slider($slug);

    if (empty($data['page_base'])){
        show_404();
    }

    print_R($data['page_base']);
    die;
}

1 个答案:

答案 0 :(得分:1)

这是由于CodeIgniter处理URL的方式。前两个URL段是类和函数。第三个和任何更多的段作为变量传递给函数。因此,在您的示例中,以下URL有效,因为完整的slug传递给函数:

example.com/page/call/con_q

public function call($slug) {
  echo $slug; // con_q
}

以下不是因为只有slug的第一段传递给函数

example.com/page/call/con_r/this

public function call($slug) {
  echo $slug; // con_r NOT con_r/this
}

public function call($segment_1, $segment_2) {
  echo $segment_1; // con_r
  echo $segment_2; // this
}

我认为可行的解决方案如下。请注意,这是未经测试的,可能需要进行一些修改。

example.com/page/call/con_r/this

public function call() {
  $slug = func_get_args();
  $slug = implode('/', $slug);
  echo $slug; // con_r/this
}