Маршрутизация CodeIgniter

Я разрабатываю сайт электронной коммерции с CI, который имеет категории продуктов и продукты. Я хочу перенаправить URL-адрес, чтобы он перешел к контроллеру продуктов, затем запустил функцию getCategoryByName для первого сегмента, а затем запустил getProductByName для второго сегмента. Вот что я имею:

 URL:
 Продукты / DocuPen / rc805
 routes.php:
 $ route ['products / ([az] +)'] = "products / getCategoryByName / $ 1";
 $ route ['products / ([az] +) / ([a-z0-9] +)'] = "products / $ 1 / getProductByName / $ 2";

Но это не работает. «docupen» – это категория, а «rc805» – продукт.

Заранее спасибо.


Спасибо за вашу помощь. Это то, чем я оказался для того, что мне было нужно.

 $ route ['products /: any /: num'] = "products / getProductByID";
 $ route ['products /: any /: any'] = "products / getProductByName";
 $ route ['products /: any'] = "products / getCategoryByName";

Мой ответ немного напоминает ответ Колина.

Когда я играл с маршрутами в CodeIgniter, я пришел к выводу, что порядок маршрутов важен. Когда он найдет первый действительный маршрут, он не будет выполнять другие маршруты в списке. Если он не найдет допустимых маршрутов, он будет обрабатывать маршрут по умолчанию.

Мои маршруты, которые я играл с моим конкретным проектом, работали следующим образом:

$route['default_controller'] = "main"; $route['main/:any'] = "main"; $route['events/:any'] = "main/events"; $route['search/:any'] = "main/search"; $route['events'] = "main/events"; $route['search'] = "main/search"; $route[':any'] = "main"; 

Если я введу « http: //localhost/index.php/search/1234/4321 », он будет перенаправлен на main / search, и затем я могу использовать $this->uri->segment(2); для извлечения 1234 .

В вашем сценарии я бы попробовал (заказ очень важен):

 $route['products/:any/:any'] = "products/getProductByName"; $route['products/:any'] = "products/getCategoryByName"; 

Я не знаю достаточно, чтобы products/$1/getProductByName/$2 то, что вы хотели ( products/$1/getProductByName/$2 ), но я не уверен, как вы создадите контроллер для обработки этой конкретной формы URI. Используя $this->uri->segment(n); заявления, упомянутые Колином в вашем контроллере, вы должны быть в состоянии делать то, что хотите.

Вы должны использовать класс URI для извлечения сегментов «docupen» и «rc805» из вашего URL-адреса. Затем вы можете использовать эти значения в любых функциях, которые вам нужны.

Например, если ваш URL-адрес – http://www.yoursite.com/products/docupen/rc805, вы должны использовать следующее в своем контроллере продуктов для извлечения сегментов и назначения их переменным:

 $category = $this->uri->segment(2); //docupen $product = $this->uri->segment(3); //rc805 

Тогда вы можете использовать $ category и $ product, но вам нужно.

Маршруты CodeIgniter не работают с регулярным выражением. Они поддерживаются, я не могу заставить их работать. Было бы намного легче их поймать

 $route['products/(:any)'] = "products/getCategoryByName/$1"; $route['products/(:any)/(:any)'] = "products/$1/getProductByName/$2";