Если вам, так же как и мне, иногда приходится поддерживать проекты, написанные на фреймворке CodeIgniter версии 2.х, то возможно эта статья сможет облегчить вам жизнь.

Дело в том, что последняя стабильная версия фреймворка была выпущена очень давно и многие даже успели его похоронить. Однако разработка, хоть и медленно, но продолжается. Более того, версия 3.0 достаточно стабильна, чтобы ее можно было использовать на живих проектах.

Несмотря на то, что ничего революционного в новой версии не появилось, полезных доработок достаточно, чтобы обновить свой проект, тем более, что обратная совместимость практически не пострадала.

CodeIgniter как зависимость

Рассмотрим процесс обновления на примере. Допустим у нас есть проект, со следующей структурой:

Для удобного контроля над версией фреймворка, добавим его в качестве зависимости в composer.json, благо такая возможность предусмотрена. Для этого в директории с проектом нужно выполнить комманду:

composer require ellislab/codeigniter:dev-develop

Composer скачает последнюю ревизию из ветки develop в директорию vendor/ellislab/codeigniter.

Таким образом структура нашего проекта будет выглядеть так:

Миграция конфигурационных файлов

Так как в версии 3.0 конфигурационные файлы и структура директории application/ несколько изменились — обновление нужно производить поэтапно.

Для начала сделаем резервную копию нашего проекта. Переименуем файл index.php в index_old.php, а директорию application/ в application_old/.

После чего скопируем новые index.php и application/ из директории vendor/ellislab/codeigniter/.

Теперь самый важный этап. Так как конфигурационные файлы между разными версиями отличаются, у нас не получится записать наши файлы поверх. Вместо этого нужно перенести интересующие нас параметры (настройки подключеня к базе, роутинги и т.д.) вручную, чтобы ничего не сломать.

Когда конфигурация выполнена, можно начинать перенос контроллеров, моделей, шаблонов и т.д. Важная особенность: для того, чтобы CodeIgniter мог загрузить нужный класс (контроллер, модель или библиотеку), имя файла должно совпадать с именем класса который он содержит, с учетом регистра. Например, класс Main должен находится в файле Main.php, а не main.php как раньше.

Итак, перенос практически завершен, остался последний штрих. В файле index.php нужно изменить значение переменной $system_path с system на vendor/ellislab/codeigniter/system. Таким образом наше приложение будет использовать версию CodeIgniter предоставленную Composer-ом.

Теперь можно открыть проект в браузере. Если он успешно открылся и проблем не наблюдается, то можно удалить index_old.php, application_old/ и system/. Они нам больше не нужны.

Если, в работе приложения наблюдаются ошибки, скорее всего вы что-то упустили при переносе конфигурации или просто некоторые вещи в новой версии работают иначе. В этом случае придется немного полистать документацию и изменить логику приложения, сообщения об ошибках должны натолкнуть на решение проблемы.

Как подружить CodeIgniter и Composer

Теперь, чтобы используемая версия фреймворка была всегда актуальной, достаточно время от времени выполнять composer update.

Если вы захотите остановиться на стабильном релизе 3.0, как только он выйдет в свет, то вам просто нужно будет в composer.json изменить dev-develop на ~3.0.

Обратите внимание, что хоть теперь в проекте и используется Composer, воспользоваться всеми его преимуществами не получится, так как для этого нужно подключить его автозагрузчик.

Исправить это можно и нужно, достаточно просто указать:

$config['composer_autoload'] = 'vendor/autoload.php';

в файле config.php.

Вывод

В итоге наш проект теперь не только работает, на самой свежей версии CodeIgniter, но и использует всю мощь Composer-а. Надеюсь, после такого апгрейда работать с вашими старыми проектами станет удобнее и интереснее, а сами проекты смогут зажить новой жизнью.

Рассказать друзьям: