
Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс "Практика HTML5 и CSS3"
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
*Наведите курсор мыши для приостановки прокрутки.
Обновление CodeIgniter с версии 1.7.2 до 2.0
После долгих эволюционных изысканий и доработок, продолжавшихся примерно один год, ребята из EllisLab выпустили-таки долгожданное обновление фреймворка CodeIgniter. Многие этого ждали, и самое главное изменение - это то, что теперь фреймворк полностью перестал поддерживать PHP4, и PHP5 - теперь необходимое условие его работы.
В этой заметке я хочу рассказать Вам о том, какие шаги предпринял именно я для того, чтобы обновить свою версию с 1.7.2 до 2.0.
В общем и целом "переезд" прошел быстро и гладко, хотя не обошлось без сюрпризов и неожиданностей.
Как известно, ни одно руководство не может в точности поведать Вам то, как именно что-то нужно делать. Всегда найдется что-то, что именно Вам делать не нужно и то, что нужно сделать несмотря на то, что это нигде не написано:)
Официальное руководство по переезду не оказалось исключением.
Итак, мои действия и комментарии:
1. Сначала создаем статичный файл (если у Вас его еще нет) для того, чтобы показывать его посетителям Вашего сайта, пока Вы колдуете над обновлением. Я свой назвал просто - index.htm и поместил в него кратенькое сообщение о том, что идут технические работы и т.п.
2. Следующим шагом я отметил для себя то, какие изменения я вносил внутри папки system. Оказалось - всего парочку. Одно - в библиотеке Validation и еще одно - добавлял в папку fonts свой шрифт для генерации капчи. У Вас, естественно, могут быть другие изменения, а может и не быть их вообще, что еще удобнее.
Смысл в том, чтобы потом Вы смогли восстановить внутри новой папки system то, что Вы изменяли специально под себя.
3. Далее я удалил все, что было внутри папки system (кроме папки application, в которой и находится наше приложение) и закачал в нее все то, что было внутри папки system в новой версии CodeIgniter. После этого внес те изменения, которые отметил в шаге 2.
4. Потом в файл .htaccess, лежащий в корне сайта я добавил строку:
ErrrorDocument 404 /index.htm
Такой записью мы говорим серверу, что если он не найдет запрашиваемого документа (а он не найдет, так как мы все уже удалили:), то пользователю нужно "вручить" файл с именем index.htm, лежащий в корне сайта.
Там же, в .htaccess добавляем еще одно условие, а именно: мы не хотим, чтобы при обращении к файлу index.htm происходила переадресация на главный файл CodeIgniter - index.php. В итоге получаем что-то в этом роде:
RewriteEngine on RewriteCond $1 !^(index\.php|robots\.txt|img|styles|demo|files|js|recommend|products|index\.htm) RewriteRule ^(.*)$ /index.php?/$1 [L] ErrorDocument 404 /index.htm
В конце второй строки как раз и указан файл index.htm, обращение к которому не должно приводить к переадресации запроса на index.php.
5. Превращаем плагины в хэлперы.
Сразу скажу, что я не создавал самописных плагинов, поэтому для меня данный пункт прошел просто и быстро. Я всего лишь заменил в паре мест вызов
$this->load->plugin ('captcha');
на
$this->load->helper ('captcha');
6. Далее нужно обновить расширения классов. Теперь все классы ядра CodeIgniter имеют префикс CI_. Поэтому теперь все Ваши контроллеры и модели должны расширять CI_Model и CI_Controller соответственно.
К примеру, вместо
class Crud extends Model
нужно писать:
class Crud extends CI_Model
А вместо
class Sections extends Controller
соответственно
class Sections extends CI_Controller
7. Наконец, нужно обновить вызовы конструкторов родительских классов.
До версии 2.0 вызов происходил так:
parent::Controller();
либо
parent::Model();
Поскольку CodeIgniter теперь полностью перешел на PHP5, необходимо вызывать конструктор родительского класса следующим образом:
parent::__construct();
8. Восьмым пунктом меня ждала первая неожиданность.
Выполнив все, что я расписал ниже, я обратился к сайту, и увидел сообщение о том, что для нормальной работы сессий мне необходимо указать в файле config.php (system - application - config.php) ключ шифрации.
Это настройка $config['encryption_key'] = "";
До этого она у меня пустовала, и все работало отлично. Я указал произвольное значение, которое мне пришло в голову, сохранил изменения и, обратившись к сайту, увидел то, что ожидал увидеть - все было как нужно. По крайней мере на первый взгляд:)
9. Но не тут-то было. Кликнув по первой попавшейся ссылке, я остался на той же самой главной странице, на которой и был. При этом url-адрес в адресной строке благополучно изменился. Я покликал по ссылкам, ведущим в разделы, материалы, попытался войти в админку - результат тот же. Адреса меняются, а страница остается прежней.
Поскольку самому копаться в этом очень не хотелось, я направился на официальный форум codeigniter и там довольно быстро нашел решение данного вопроса.
Оказалось, что для того, чтобы все заработало, нужно поменять еще одну настройку в config.php. Я изменил
$config['uri_protocol'] = "AUTO";
на
$config['uri_protocol'] = "QUERY_STRING";
После этого все заработало. Отлично, переезд успешно состоялся).
Надеюсь, данная заметка будет полезна тем, кто столкнулся с похожей задачей обновления CodeIgniter.
P.S. Есть ли альтернатива CodeIgniter? Можете решить сами, просмотрев бесплатный видеокурс по основам работы с PHP-фреймворком CakePHP. Скачайте его, чтобы получить общее представление о возможностях этого фреймворка:
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: