Я разрабатываю сайт электронной коммерции с 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";