Параметр Codeigniter, передаваемый контроллеру

Я создаю учебную систему с помощью codeigniter и хотел бы получить следующую структуру URL:

  • / tutorials -> вводная страница со списком всех категорий
  • / tutorials / {категория как строка} -> это даст список учебников для данной категории, например / tutorials / php
  • / tutorials / {категория как строка} / {идентификатор} / {tutorial slug} -> это покажет учебник, например / tutorials / php / 123 / how-to-use-functions
  • / tutorials / add ->, чтобы добавить новый учебник

Проблема в том, что когда я хочу использовать первые два типа URL-адресов, мне нужно будет передать параметры функции индекса контроллера. Первый параметр – необязательная категория, второй – дополнительный идентификатор учебника. Я провел некоторое исследование до того, как отправил сообщение, поэтому выяснил, что я мог бы добавить маршрут, например, tutorials/(:any) , но проблема в том, что этот маршрут будет передавать add в качестве параметра при использовании последнего URL (/ tutorials /Добавить).

Любые идеи, как я могу это сделать?

Ваши правила маршрутизации могут быть в следующем порядке:

 $route['tutorials/add'] = "tutorials/add"; //assuming you have an add() method $route['tutorials/(:any)'] = "tutorials/index"; //this will comply with anything which is not tutorials/add 

Затем в методе index () вашего контроллера вы сможете определить, проходит ли идентификатор категории или учебника!

Я думаю, что переназначение должно быть более полезным для вашей проблемы, если вы хотите добавить больше методов к контроллеру, а не просто «добавить». Это должно выполнить задачу:

 function _remap($method) { if (method_exists($this, $method)) { $this->$method(); } else { $this->index($method); } } 

Через несколько минут после публикации, я думаю, я нашел возможное решение для этого. (Мне стыдно).

В псевдокоде:

 public function index($cat = FALSE, $id = FALSE) { if($cat !== FALSE) { if($cat === 'add') { $this->add(); } else { if($id !== FALSE) { // Fetch the tutorial } else { // Fetch the tutorials for category $cat } } } else { // Show the overview } } 

Обратная связь для этого решения приветствуется!