Как вызвать контроллер подпапки с маршрутизацией CodeIgniter

Я использую структуру CodeIgniter. У меня есть файлы в папке моих контроллеров:

- Controllers --- admin.php - Admin Controller --- /Admin - Admin Folder ----- category.php - Category Controller in Admin folder. 

Url: mysite.com/index.php/admin/category говорит, что страница не найдена, потому что она пытается вызвать функцию category контроллера admin но я хочу, чтобы она mysite.com/index.php/admin/category функцию index контроллера category в папке Admin .

Также я использую контроллер admin для создания, редактирования и т. Д. mysite.com/index.php/admin/create контроллера admin например mysite.com/index.php/admin/create .

Я думаю, я должен использовать $route array в файле конфигурации. Какую маршрутизацию я должен использовать?

Это поведение по умолчанию для ядра CI. См. function _validate_request($segments) в system/core/Router.php . Эта функция пытается определить путь к контроллеру. Он проходит через разные условия один за другим и возвращает результат после выполнения данного условия. Кроме того, существуют два условия:

  1. Это файл? ( system/core/Router.php линия system/core/Router.php 271, CI 2.1.2)

     // Does the requested controller exist in the root folder? if (file_exists(APPPATH.'controllers/'.$segments[0].'.php')) { return $segments; } 
  2. Это папка? ( system/core/Router.php линия system/core/Router.php 277, CI 2.1.2)

     // Is the controller in a sub-folder? if (is_dir(APPPATH.'controllers/'.$segments[0])) { // ... 

В вашем случае функция вернется после выполнения первого из двух условий, то есть при обнаружении файла admin.php .

Существует два решения:

  1. Переименуйте файл или папку и отредактируйте приложение соответственно.
  2. Измените поведение по умолчанию, расширив ядро . В основном это будет заключаться в изменении последовательности проверки условий. Это можно сделать, создав класс MY_Router :

     class MY_Router extends CI_Router { // ... } 

    и переписывание оригинальной функции _validate_request() с измененной последовательностью условий. Поэтому сначала проверяем каталог, а затем – функцию.

Я бы предложил первое решение, если оно не требует слишком много рефакторинга.

В нижней части вашего файла application / config / routes.php добавьте что-то вроде этого:

 $route['admin/create'] = 'admin/category';