CodeIgniter隐藏帖子ID,仅在URL中显示标题

时间:2019-05-01 12:40:45

标签: codeigniter

我在Codeigniter中工作,我想从URL隐藏ID。

我当前的网址是:

www.localhost/CI/services/1/ac_repair

但在codeigniter中需要这种URL:

www.localhost/CI/services/ac_repair

查看页面代码:


<?=anchor('services/' . $ser->s_id . '/' . url_title($ser->s_title,'_') ,'View Service');?>

控制器代码:


public function services()
    {
        $this->load->model('ServicesModel', 'ser_model');


        $s_id = $this->uri->segment(2, 0);
        if($s_id){

            $get_service = $this->ser_model->get_ser($s_id);
            return $this->load->view('public/detail', compact('get_service') );
        }
        else
        {
            // $services = $this->articles->articles_list( $config['per_page'], $this->uri->segment(3) );
        $get_services['result'] = $this->ser_model->all_services_list();
        // $this->load->view('public/services', ['services'=>$services]);

        $this->load->view('public/services', $get_services);
        }
    }

此处的模型代码:


public function get_ser($id)
    {
        // $q = $this->db
        $q = $this->db->select('*')
                ->from('services')
                ->where( ['s_id' => $id] )
                ->get();
        if ( $q->num_rows() )
            return $q->row();
        return false;
    }

但在codeigniter中需要这种URL:

www.localhost/CI/services/ac_repair

1 个答案:

答案 0 :(得分:0)

如果要使用此功能,则必须能够使用标题ac_repair代替id。这意味着标题需要标记为unique,因此不包含任何重复项。

以下伪代码应该给您一个提示:

function services($url_title = null) {

     if (!is_null($url_title)) {

         // get ser would use title instead of $id
         $this->db->where('title', $url_title);     

     } else {

         // all rows

     }

}

其他方法是“ hacky”的,我想不起任何我认为有用的方法。

旁注:您绝对不应在视图中返回