Преобразование из CodeIgniter 1.7.3 в 2.0+ - PullRequest
4 голосов
/ 18 июня 2011

Привет и спасибо за чтение.

Я сразу перейду к делу: у меня есть проект веб-сайта, который я создавал с использованием CodeIgniter 1.7.3, который мне очень понравился, но я собирался перейти на CI 2.0 +.

Я попытался выполнить прямое копирование, просто переместил свои папки для контроллеров, моделей и представлений в инфраструктуру CI 2.0, но при попытке просмотреть свои страницы я получил ошибку сервера 500.

После некоторого исследования я обнаружил, что все ваши контроллеры теперь должны использовать "CI_Controller" в качестве родительского класса. Также я заметил, что если вы хотите включить конструктор в ваш класс контроллера, он должен использовать синтаксис «function __construct ()» в качестве имени и родительского класса. Кажется, что CI 2.0+ больше не поддерживает использование конструктора, имя которого совпадает с именем класса, например "Класс Blogs extends CI_controller {function Blogs () {parent :: __ construct ();}}" больше не поддерживается? Я читал журнал изменений CI, но все, что я вижу, это исправления ошибок и новые функции, ничего о проблемах совместимости со старыми версиями CI? Кто-нибудь еще знает о каких-то других секретных маленьких подводных камнях?

Спасибо

H

Ответы [ 2 ]

7 голосов
/ 18 июня 2011

CI 2.x удалил всю совместимость с PHP4, а также обновил ряд стандартов, чтобы соответствовать PHP 5.3 в будущем. Одним из них является проблема конструктора, с которой вы столкнулись. Начиная с PHP 5.3, функция ClassName() больше не является конструктором для класса, это просто другая функция. Вы должны явно объявить функцию __construct для выполнения любых задач, которые необходимо выполнить при создании нового экземпляра класса. Учитывая это, вы должны видеть, что больше не имеет смысла вызывать parent::ClassName() в вашем дочернем конструкторе, так как эта функция больше не будет конструктором родителя.

Еще одна ловушка, с которой мне недавно пришлось столкнуться - это способ обработки массива $_GET. В версиях 1.x вы могли использовать строки запроса для передачи дополнительной информации и при этом использовать сегменты URI для маршрутизации к контроллерам и функциям. Это особенно полезно для вызовов AJAX, когда вы не всегда знаете все параметры, отправляемые на сервер и с сервера в конкретном запросе. В версиях 2.x файл config.php содержит новую опцию $config['allow_get_array']. Это должно быть установлено в TRUE, если вы хотите использовать строки запроса, в противном случае входной класс очищает массив $_GET как часть процедуры инициализации CI при каждом запросе.

Что-то, что не является подводным камнем, но может оказаться полезным, - это новые опции в config / autoload.php, которые позволяют вам добавлять новые каталоги приложений в ваш проект. Если вы работаете с несколькими различными проектами с помощью CI и хотите хранить любые полезные библиотеки, которые вы пишете, в одном месте, теперь вы можете добавить это местоположение в $autoload['packages']. CI ожидает, что любой путь в этом массиве будет содержать подкаталоги «контроллеры», «модели», «библиотеки» и «помощники». Он не будет жаловаться, если у вас нет этих каталогов, но они, по крайней мере, понадобятся вам для всего, что вы собираетесь загрузить, то есть библиотеки будут находиться в / библиотеки, как и в основной папке приложения.

6 голосов
/ 18 июня 2011

Читали ли вы официальное руководство по обновлению с 1.7.x до 2.x ?

так короче

  • Обновление моделей и контроллеров до расширить CI_Model и CI_Controller
  • Обновление вызовов родительского конструктора

    класс Wow extends CI_Controller {

          function __construct()
          {
              parent::__construct();
                        //your stuff
          }
    
          function index()
          {
                   // just for example 
          }
        }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...