Мой default_controller в конфигурации маршрутов задан как «home.php».
У меня есть вспомогательный каталог для моих контроллеров, который можно назвать «папкой». Итак, если я нахожусь на http://mysite.com/folder/ , то по умолчанию контроллер «folder / home.php» должен быть вызван правильно?
Однако по какой-то причине это не работает, я получаю 404. Посещение http://mysite.com/folder/home или http://mysite.com/folder/home/index работает так, как ожидалось. В дополнение к этому контроллер по умолчанию работает в корневом каталоге ( http://mysite.com загружает home.php).
Любые идеи, кто-нибудь еще испытал это? Я не могу обдумать это – это будет проблема CI, но я не могу найти кого-то другого с той же проблемой.
Документация, как я понимаю, по крайней мере, предполагает, что это должно работать нормально: http://codeigniter.com/user_guide/general/controllers.html#subfolders
Установка контроллера по умолчанию на «folder / home.php» означает, что http://mysite.com/folder/ работает нормально, как ожидалось. За исключением того, что я хочу, чтобы контроллер по умолчанию просто был «home.php» – как в корне, так и в подкаталоге, home.php внутри этого каталога должен быть загружен, как предполагает документация.
ура
Для каждой routes.php
в папке контроллеров вы должны указать контроллер по умолчанию в routes.php
. Встроенный $route['default_controller']
не будет работать для подпапок.
например: Для установки контроллера по умолчанию для вашей folder
папке для home
добавьте следующее в файл /application/config/routes.php
:
$route['folder'] = "folder/home";
что означает http://mysite.com/folder/
– это то же, что и http://mysite.com/folder/home
как URL.
Вы можете расширить системный маршрутизатор в соответствии с требованиями,
application/core/
/ * * Чтобы изменить этот заголовок лицензии, выберите «Заголовки лицензий» в «Свойства проекта». * Чтобы изменить этот файл шаблона, выберите «Инструменты | Шаблоны * и откройте шаблон в редакторе. * /
/** * Description of My_Router * * @author girish */ class My_Router extends CI_Router { //put your code here public function __construct($routing = NULL) { parent::__construct($routing); } protected function _set_default_controller() { if (empty($this->default_controller)) { show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.'); } // Is the method being specified? if (sscanf($this->default_controller, '%[^/]/%[^/]/%s', $directory, $class, $method) !== 3) { $method = 'index'; } if (is_dir(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory) === true) { if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) { // This will trigger 404 later return; } $this->set_directory($directory); $this->set_class($class); $this->set_method($method); } else { if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) { $method = 'index'; } if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) { // This will trigger 404 later return; } $this->set_class($class); $this->set_method($method); } // Assign routed segments, index starting from 1 $this->uri->rsegments = array( 1 => $class, 2 => $method ); log_message('debug', 'No URI present. Default controller set.'); } }
и перезаписать _set_default_controller()
из пользовательского метода, он будет работать и с контроллером _set_default_controller()
а также с контроллером корневого каталога.
А в application/config/routes.php
если вам нужен контроллер по умолчанию для подкаталога, тогда
$route['default_controller'] = "admin/admins/login";
если вам нужен корневой каталог по умолчанию, то
$route['default_controller'] = "welcome/index";
не уверен, что он будет работать во всех версиях, но протестирован в CI3.0.6
Если вы хотите оставаться гибким, вам нужно передать все после начальной папки (в application/config/config.php
):
$route['home'] = "home/whatever"; $route['home/(:any)'] = "home/whatever/$1";
Маршрут по умолчанию используется для указания CI, какой класс контроллера должен быть загружен, если URI не содержит данных.
$route['default_controller'] = "unicorn/best";
Итак, когда я загружаю
http://example.com/index.php/unicorn/
будет загружен лучший контроллер.
также когда я загружаю
http://example.com/
или
http://example.com/index.php/horse/
будет загружен лучший контроллер.
МОЯ СТРУКТУРА ПАДЕНИЯ
--controllers --backend --frontend --home.php --products.php --productDetail.php --homeIndex.php
В config / routes.php
$route['default_controller'] = 'homeIndex'; $route['frontend'] = 'frontend/home'; $route['backend'] = 'backend/home';
В контроллерах / homeIndex.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); require_once(APPPATH.'controllers/frontend/Home.php'); class homeIndex extends home { public function index() { $this->action(); } }
по умолчанию homeIndex будет загружен и из homeIndex я вызову функцию frontend / home / action.