Сравнение Yii с CodeIgniter
2 интересных php-фреймворка в сравнении
Разработчики
Активный разработчик у ядра Yii на данный момент один, но в планах привлечение к
разработке сообщества. Пожелания, если они адекватны, учитываются.
CodeIgniter разрабатывается компанией под свои нужды. Предложения по крупным
изменениям в ядре чаще всего игнорируются.
Документация
Документация CodeIgniter, наверное, так и останется для меня эталоном. 90% всего
функционала описаны довольно компактно, простым языком и отлично оформлены.
Пишется документация исключительно разработчиками. Адекватные пожелания принимаются и
рассматриваются. Перевод на русский делался довольно давно. Основные моменты всё
ещё актуальны, но некоторые части пора обновлять.
Yii более сложен и достаточно молод. Поэтому документация не охватывает некоторых
интересных мест (впрочем, неплохо описанных в API). Тем не менее, от этого
разработчик не страдает: описаны самые типичные моменты, которые в большинстве
случаев и придётся использовать. Язык документации больше похож на научный (в тех
частях русского перевода, которыми занимался я попытался строить предложения
попроще). Оформление аккуратное, но не вызывает умиления как это делает
документация по CodeIgniter.
Документация пишется разработчиками. Пожелания принимаются. Перевод осуществляется
несколькими командами разработчиков. Делается это централизованно с использованием
SVN. Вступить в команду переводчиков может любой желающий.
Совместимость
Yii написан на PHP5.2 (с PHP5.3 тоже работает) и не поддерживает PHP4. Используется
довольно много нового для PHP5.2 функционала. Для работы необходим PDO.
CodeIgniter с 2011 года тоже совместим с PHP5.
Скорость
CodeIgniter известен своей лёгкостью и скоростью работы. Yii также очень быстр,
особенно если рассматривать достаточно гибкие фреймворки. На официальном сайте Yii
есть сравнение скорости работы.
Структура директорий
Структура директорий настраивается лучше, чем в CI. Наверное потому, что в CI
структура по умолчанию понятнее и запросов на её кардинальное изменение не много.
Я лично перенастроил Yii на структуру, похожую на CI.
Автозагрузка
В CI очень неплохо сделана загрузка классов. Кое-что грузится автоматически,
остальное — через $this->load. В Yii автоматически грузится всё, что указано в
файлах конфигурации.
Роутер
Механизм построения URL в Yii на первый взгляд похож на CI, но поддерживает такие
приятные штуки как отключение маршрутов по умолчанию и нормальную поддержку GET.
Контроллер
Для именования в Yii используются постфиксы MyController против My в CI,
actionMyCool() против mycool в CI. Это решает проблему с дублирующимися
именами классов, и открытыми методами часто возникающую в CI.
В общем, в Yii контроллер более гибок.
Из неудобств: параметры, переданные через URL приходится получать из $_GET, а не
из параметров метода, как это было в CI.
Отображение
View в CodeIgniter откровенно слабый, хотя, если использовать сторонние решения
(http://code-igniter.ru/wiki/View, http://code-igniter.ru/wiki/View_helper) всё
не так уж и плохо.
Yii в этом плане очень хорош. Поддерживаются layout-ы, вложенные view, виджеты,
есть API для реализации своих шаблонизаторов (с уже реализованным «компилированием»)
в код на PHP.
Модель
В CI модель непосредственно связана с базой данных. Других моделей просто нет.
В Yii модель может использовать ActiveRecord, а может и не работать с базой.
Active Record
Active Record в CodeIgniter всегда вызывал у меня смешанные чувства: с одной стороны
некоторые операции делать было приятно, с другой… в общем-то синтаксис дублировал SQL
без явных плюсов. Результат возвращался в виде массива, либо в виде stdClass.
В Yii ситуация намного приятней: AR тут поддерживает отложенную загрузку и отношения.
Данные представлены моделями, для которых можно определить валидаторы, свои методы и
даже behavior-ы (примерно такие, как в Doctrine).
Валидация форм
Валидатор в Yii на голову опережает CodeIgniter. Можно использовать валидаторы
модели, есть достаточно много встроенных правил валидации и легко реализовать
свои.
Расширяемость
В Yii можно забыть про CodeIgniter-ский MY_. Всё делается нормальным ООП-способом.
На данный момент в Yii я не встретил тупикового кода, который не выходило бы перекрыть.
В CI я сталкивался с такими тупиковыми местами несколько раз. Решение находилось,
но каждый раз довольно грязное.
Хуки
В CodeIgniter можно включить механизм хуков ядра, подобный Drupal. В Yii для достижения
сходного функционала ничего включать не надо: ядро само по себе даёт довольно
много методов для выполнения своего кода в определённые моменты.
Чего нет в Yii
Встроенных классов для работы с почтой, изображениями, FTP, ZIP, Trackback,
скаффолдинга.
Также в Yii нет хелперов в том виде, который был в CI, но ничто не запрещает их
реализовать… или позаимствовать, например, из Kohana.
Чего нет в CI
Хорошего гибкого API, консоли, генерации классов, гибкой системы прав,
нормального кеша, моделей как таковых, нормальной реализации сессий, ООП.
Итог
А итога не будет. Каждый выбирает инструмент сам ;)
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
5 комментариев
Долгое время сидел на codeigniter, думал, что классная вещь, а на самом деле тупеешь с ней, всё настолько разжёвано, что честно сказать больше похоже на готовую цмс нежели на полноценный фреймворк. darl я тоже долго пытался привыкнуть и разобраться в yii, но результат стоит того, получаешь очень гибкий инструмент для создания практически любого проекта.