Я использую структуру 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
. Эта функция пытается определить путь к контроллеру. Он проходит через разные условия один за другим и возвращает результат после выполнения данного условия. Кроме того, существуют два условия:
Это файл? ( 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; }
Это папка? ( 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
.
Существует два решения:
Измените поведение по умолчанию, расширив ядро . В основном это будет заключаться в изменении последовательности проверки условий. Это можно сделать, создав класс MY_Router
:
class MY_Router extends CI_Router { // ... }
и переписывание оригинальной функции _validate_request()
с измененной последовательностью условий. Поэтому сначала проверяем каталог, а затем – функцию.
Я бы предложил первое решение, если оно не требует слишком много рефакторинга.
В нижней части вашего файла application / config / routes.php добавьте что-то вроде этого:
$route['admin/create'] = 'admin/category';