2016-09-20 4 views
0

Я пытаюсь сделать это, когда я нажал на свой конкретный продукт, вместо идентификатора моего продукта появится в моем URL-адресе, я хочу поместить имя продукта. то, что я сделал сегодня base_url/контроллер/метод/идентификаторPhp - Codeigniter url spaces

я хочу сделать, это base_url/контроллер/метод/название-продукта или base_url/контроллер/метод/product_name

, но в моем коде, что произошло, в моем имени продукта все пробелы заняты% 20, что я должен сделать, чтобы заменить% 20 ​​либо подчеркиванием, либо тире или любым безопасным способом назвать имя продукта в URL-адресе.

и все, что я получаю от этого $ name (product_name), я передам его моей модели.

МОЙ 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

'str_replace ('', '_', $ promo_row-> name)' OR 'str_replace ('', '-', $ promo_row-> name)', сделайте это, прежде чем поместить его в URL-адрес. – ArtisticPhoenix

+0

@ArtisticPhoenix дает наилучшую идею для вас, а также вы можете использовать 'urlencode()' здесь. –

ответ

0

Это должно работать,

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

Насколько - против _ если вы маршрутизации к ним, например, сказать, что название продукта становится метод в контроллере, я не думаю, что PHP позволяет в именах методов -, но это не делает разрешите пробелы либо. Вы можете обмануть, используя __call(), но это другая история для другого дня.

Если его параметр, то это не имеет значения. Просто, если это имя метода/функции.

-Note- это не CI-специфическая ошибка, посмотрите на любой URL-адрес, скажите мне, видите ли вы пробелы в них.

ОБНОВЛЕНИЕ: как предложение лучший способ справиться с этим, имея поле, посвященное имя 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