Сравнение Yii с CodeIgniter

Сравнение 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, консоли, генерации классов, гибкой системы прав,
нормального кеша, моделей как таковых, нормальной реализации сессий, ООП.

Итог

А итога не будет. Каждый выбирает инструмент сам ;)

Источник: habrahabr.ru/blogs/php/67797/

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (5)     Подпишитесь на RSS комментариев к этой статье.

5 комментариев

#43
macsly говорит:
April 11, 2011 at 04:34 pm
Сравнение очень кстати! А как автор видит в таком же сравнение Zend Framework, Symphony c CodeIgniter? Хотелось бы мнение читателей!
#44
Владимир говорит:
July 5, 2011 at 10:41 am
Кстати уже давно есть нормальный перевод гайда по codeigniter 2…все уже знают...кто не знает, вот ссылка http://whitepiano.ru/user_guide/
#227
Bethrezen говорит:
January 20, 2012 at 05:15 pm
Скаффолдинг в Yii есть - gii.
#476
darl говорит:
May 29, 2012 at 11:42 am
Долго бился над изучение Yii, бывало что хотел все бросить, но упорство помогло в изучении Yii. Зато теперь балдежь полный)))) Yii безусловно крут. 
#555
sleeprain говорит:
July 10, 2012 at 09:22 pm

Долгое время сидел на codeigniter, думал, что классная вещь, а на самом деле тупеешь с ней, всё настолько разжёвано, что честно сказать больше похоже на готовую цмс нежели на полноценный фреймворк. darl я тоже долго пытался привыкнуть и разобраться в yii, но результат стоит того, получаешь очень гибкий инструмент для создания практически любого проекта.