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