2012-06-06 15 views
0

У меня возникла проблема с маршрутизацией в кодеигниторе.Codeigniter: сегменты маршрутизации и URI

Допустим, у меня есть контроллер с именем страницы, с помощью метода под названием продукта, который делает следующее:

public function product() { 
    $this->load->model('pages_model'); 
    $productid = $this->uri->segment(3); 

    $data['product'] = $this->pages_model->getProduct($productid); 
    // ...load view, etc. 
} 

Чтобы получить доступ к определенному продукту, мой адрес будет www.example.com/pages/product/ Я БЫ.

Я хочу настроить пользовательский маршрут, чтобы я мог получить доступ к продукту, перейдя по адресу www.example.com/name-of-product.

Однако, поставив

$route['name-of-product'] = 'pages/product/ID'; 

не работает. Он загрузит представление продукта, но данные продукта не будут загружены. Если я говорю

$route['name-of-product/:any/ID'] = 'pages/product/ID'; 

работает как надо, но я не хотел бы иметь два дополнительных сегмента в конце URL.

ответ

1

Вам не нужны 2 дополнительных сегмента. Одного должно быть достаточно.

$route['PRODUCT_NAME/PRODUCT_ID'] = 'pages/product/PRODUCT_ID'; 

Однако, если бы я тебя, я сделал бы URL, чтобы иметь первый сегмент быть идентификатор продукта вместо.

$route['PRODUCT_ID/PRODUCT_NAME'] = 'pages/product/PRODUCT_ID'; 

Таким образом, если я знаю только идентификатор продукта, я не должен был бы ввести example.com//123, которые могли бы вызвать некоторые проблемы. Если я не ошибаюсь, если вы это сделаете, CI попытается загрузить контроллер с именем 123.

Смежные вопросы