我试图做的是当我点击我的特定产品时,而不是我的产品的ID会出现在我的网址中,我想要提供产品的名称。 我今天所做的是base_url / controller / method / id
我想做的是base_url / controller / method / product-name或base_url / controller / method / product_name但在我的代码中发生的事情是在我的产品名称中所有空格都被%20占用我该怎么做才能用下划线或破折号或者在url中调用产品名称的任何安全方式替换%20。
无论我在$ name(product_name)上获得什么,我都会将它传递给我的模型。
MY CONTROLLER
public function details($name){
$prod_row = $this->PromoModel->getpromorow($name);
$data['promodetail'] = $prod_row;
$data['promo'] = $this->PromoModel->get_promo();
$data['message']= "<h1> NO PROMOS AVAILABLE</h1>";
$this->load->view('include/header',$data);
$this->load->view('include/nav');
$this->load->view('promo/PromoDetail', $data);
$this->load->view('include/footer');
}
我的模特
public function getpromorow($name) {
$this->db->where('name', $name);
$query = $this->db->get('promo');
return $query->row();
}
public function get_promo(){
$query = $this->db->get('promo');
return $query->result();
}
我的观点
<a href="<?= base_url(). 'promos/details/' . $promo_row->name ?>"> </a>
答案 0 :(得分:0)
这应该有效,
<a href="<?= base_url(). 'promos/details/' . str_replace(' ', '_', $promo_row->name); ?>"> </a>
至于-
vs _
如果你要路由它们,例如说产品名称成为控制器中的一种方法,我认为PHP不允许{{1}在方法名称中,但它也不允许使用空格。您可以使用-
作弊,但这是另一天的其他故事。
如果它是一个参数,那么它不应该那么重要。就好像它是方法/函数名称。
- 注意 - 这不是特定于CI的错误,请查看任何网址,告诉我您是否看到空格。
UPdate:作为建议,处理此问题的最佳方法是使用专用于网址名称的字段(例如__call()
等)以及何时制作新产品对名称进行转换。然后它是您可以控制的可编辑数据。例如,如果您的产品名称中包含slug
,那该怎么办?这可能会导致问题。你可以通过单独为此提供单独的数据来避免这种情况,它甚至可能像SKU号码等。它需要设置更多的工作,但从长远来看更容易维护。
答案 1 :(得分:0)
晚聚会。但是最好是使用urldecode($value)
。由于“%20”中的“%”再次被编码为“%25”,因此我们可能不得不两次使用urldecode
。在这种情况下-urldecode(urldecode($promo_row->name))