2016-09-20 67 views
0

我想要做的是当我点击了我的具体产品,而不是我的产品的ID会出现在我的网址,我想把产品的名称。 我怎么做今天BASE_URL /控制器/方法/ IDPHP - Codeigniter的网址空间

我想要做的就是BASE_URL /控制器/方法/产品名称或BASE_URL /控制器/方法/ PRODUCT_NAME

,但在我的代码所发生的事情是在我的产品名称中,所有空格都被%20占据,我应该如何用下划线或短划线或任何安全的方式在URL中调用产品名称来替换%20。

和我得到的任何$ name(product_name)我都会将它传递给我的模型。

我的控制器

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

'str_replace('','_',$ promo_row-> name)'或'str_replace('',' - ',$ promo_row-> name)',在将其放入url之前先执行此操作。 – ArtisticPhoenix

+0

@ArtisticPhoenix给你最好的想法,你也可以在这里使用'urlencode()'。 –

回答

0

这应该工作,

<a href="<?= base_url(). 'promos/details/' . str_replace(' ', '_', $promo_row->name); ?>"> </a> 

至于- VS _如果你是路由到它们,例如说,产品的名称成为您的控制器的方法,我不认为PHP允许在方法名-,但它不允许空间..你可以使用__call()作弊,但这是另一个故事在不同的一天。

如果它的一个参数,那么它应该不重要。只是它是一个方法/函数名称。

注意 - 这不是一个CI特定的错误,看看任何网址,告诉我,如果你看到他们的空间。

更新:作为建议处理这个最好的方法是通过一个专门的URL名称字段(如slug或这样的),当一个新产品是由仅需要做的名称变换。那么这是一个可以控制的可编辑数据。例如,如果您的产品名称中包含-的产品。这可能会导致问题。你可以通过单独的数据来避免这种情况,它甚至可以像SKU号码一样。它可以更多的工作来设置,但从长远来看更易于维护。

+0

我试过你发布的代码,它的工作原理,当涉及到控制器,我做了反过来$ url = str_replace(' - ','',$ name);然后我将它解码为$ decode = urldecode($ url)并传递给可能的模型$ prod_row = $ this-> PromoModel-> getpromorow($ decode);所以我可以在我的模型中传递确切的名称,我将获得该特定产品的所有信息。我不知道这是正确还是安全的方式,或者如果你有任何建议。但谢谢你帮助我。 – erinr

+1

在链接本身中删除空格可能会更好,因为您依赖于浏览器的行为,将它们留在其中。如果我正确地理解了这一点。您可以在使用'str_replace(' - ','',$ product)'事实后删除它们,只要确保不要将'-'放在产品名称中。 – ArtisticPhoenix

+1

另一种更好的方法是在产品中添加一个字段,命名为'slug'并将该字段用作url名称,您可以在添加新产品时自动创建该字段,但因为它是可编辑的,所以您可以更好地控制它。 – ArtisticPhoenix