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 не идеален в других установках, но, учитывая, что в папке контроллеров этого проекта нет подпапок, это быстрое решение для этого проекта.

Другие вопросы по тегам