CodeIgniter 3 не вызывает контроллер по умолчанию?
Меня попросили разобраться с проблемой, когда default_controller в проекте CodeIgniter 3, кажется, не вызывается. Вместо этого мы видим ошибку 404.
в application/controllers
папка есть Welcome.php
файл со следующим содержанием:
class Welcome extends CI_Controller {
public function __construct()
{
parent::__construct();
// Your own constructor code
}
public function index()
{
print('hello');
$this->load->view('welcome_message');
}
}
application/config/routes.php
файл имеет:
$route['default_controller'] = "welcome";
Я вижу только 404 и ни одного ожидаемого текста.
Добавление print
заявление в routes.php
показывает, что он загружается. Кроме того, при явной привязке к маршруту вызывается его, но не тогда, когда он установлен в качестве контроллера по умолчанию.
$route['blah'] = "welcome"
Кто-нибудь может подсказать, что может происходить?
Кстати, мы используем PHP7 на машине с Ubuntu 16.04.
1 ответ
Оказывается, проект был обновлением по сравнению с проектом CodeIgniter 2, и были некоторые этапы миграции, которые еще не были полностью завершены. Оказалось, что в папке библиотек был MY_Router.php, который, казалось, отбрасывал вещи - по крайней мере, перемещение его в приложения / ядро решило проблему.
В файле MY_Router.php потребовалась дополнительная модификация с учетом заглавных букв имен файлов, запрошенных как часть миграции CI3:
function _validate_request($segments)
{
// Does the requested controller exist in the root folder?
if (file_exists(APPPATH.'controllers/'.ucfirst($segments[0]).'.php'))
{
return $segments;
}
...
}
Кстати, я был уверен, что это не проблема перезаписи HTTP-сервера, поскольку на странице ошибки CodeIgniter 404 отображался ожидаемый путь вызова. Я добавил print(_SERVER['REQUEST_URI'])
чтобы увидеть, что происходит.
Редактировать: теперь я вижу, что вышеуказанный подход ucfirst не идеален в других установках, но, учитывая, что в папке контроллеров этого проекта нет подпапок, это быстрое решение для этого проекта.