Я создаю простое веб-приложение с использованием CodeIgniter 3.0.3 и столкнулся с множеством проблем, связанных с последовательностью капитализации. В документации CI 3.x четко указано, что файлы модели должны быть ucfirst и ссылаться на lcfirst i.e. файл application/models/Foobar_model.php
, загруженный с использованием $this->load->model('foobar_model')
и вызываемый с $this->foobar_model
. Источник: Official CI 3.x User Guide.Мои файлы CodeIgniter 3.0.3 не могут быть найдены, если только lcfirst (example_model.php)
Когда я следую этим правилам, я получаю следующее сообщение об ошибке Unable to locate the model you have specified: foobar_model
. Ссылка на модель с использованием Ucfirst i.e $this->load->model('Foobar_model')
и $this->Foobar_model
генерирует то же сообщение об ошибке. Я могу решить проблему, создав мое имя lcfirst application/models/foobar_model.php
, а имя класса внутри файла остается Ucfirst. Пока я называю свой файл lcfirst foobar_model.php, кажется, не имеет значения, использую ли я Ucfirst или lcfirst ссылаться на него изнутри моих контроллеров.
Странно, я обнаружил, что мне нужно использовать application/controllers/Ucfirst_controller.php
для моих контроллеров с чувствительной к регистру маршрутизации, т. Е. $route['default_controller'] = 'Ucfirst_controller';
. Я получаю ошибку 404 при попытке маршрута $route['default_controller'] = 'lcfirst_controller';
до application/controllers/lcfirst_controller.php
.
Все, что я нашел в stackoverflow и других форумах для моделей CodeIgniter и контроллеров, похоже, включает людей, использующих lcfirst вместо Ucfirst на CodeIgniter 3.x, или используя Ucfirst вместо lcfirst на CodeIgniter 2.x.
В основном, мой вопрос в том, откуда возникает непоследовательность этого случая и как его исправить? Я хочу следовать стандартам, чтобы другие могли присоединиться к моему проекту позже.
Дополнительная информация: Я не думаю, что это должно иметь значение, но на всякий случай. Я разрабатываю LAMP на машине Ubuntu с форматированием файла ext4, который, очевидно, чувствителен к регистру. Я планирую развернуть свой проект с помощью Google Compute Engine, работающего с debian-7-wheezy с стеком HHVM. В настоящее время я разрабатываю только один партнер, который разрабатывает в стеке MAMP с форматированием без учета регистра, поэтому он не испытывает ни одной из этих проблем.
Спасибо всем: ~)
Если возможно, совместите среду разработки с вашей производственной средой, если вы не ожидаете поиска ошибок в производственной системе. – MonkeyZeus
У меня нет времени просеивать кодовую базу CodeIgniter прямо сейчас, но я настоятельно рекомендую проверить, что происходит, когда вы вызываете '$ this-> load-> model();', просматривая '/ system/core/Loader.php' и найдите 'function model() {}' и имейте в виду [это] (http://stackoverflow.com/a/5260230/2191572) и [this] (http://stackoverflow.com/a/5643544/2191572) – MonkeyZeus
Спасибо за совет @MonkeyZeus, кажется, что каким-то образом мой партнер-разработчик использовал старый loader.php из CI 2.x, поэтому он был настроен на то, что модели будут выглядеть как lcfirst, а при слиянии кода в какой-то момент, непреднамеренно понизил мой loader.php. Будет опубликован как ответ, как только я подтвержу, что это исправляет мои проблемы. Еще раз спасибо – snoopy