2016-09-20 24 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