Pull to refresh

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

PHP *
Как-то я пообещал сравнить Yii с CodeIgniter.

Думаю, на данный момент я достаточно распробовал Yii, чтобы адекватно сравнить
два замечательных фреймворка.



Разработчики


Активный разработчик у ядра Yii на данный момент один, но в планах привлечение к
разработке сообщества. Пожелания, если они адекватны, учитываются.

CodeIgniter разрабатывается компанией под свои нужды. Предложения по крупным
изменениям в ядре чаще всего игнорируются.

Документация


Документация CodeIgniter, наверное, так и останется для меня эталоном. 90% всего
функционала описаны довольно компактно, простым языком и отлично оформлены.

Пишется документация исключительно разработчиками. Адекватные пожелания принимаются и
рассматриваются. Перевод на русский делался довольно давно. Основные моменты всё
ещё актуальны, но некоторые части пора обновлять.

Yii более сложен и достаточно молод. Поэтому документация не охватывает некоторых
интересных мест (впрочем, неплохо описанных в API). Тем не менее, от этого
разработчик не страдает: описаны самые типичные моменты, которые в большинстве
случаев и придётся использовать. Язык документации больше похож на научный (в тех
частях русского перевода, которыми занимался я попытался строить предложения
попроще). Оформление аккуратное, но не вызывает умиления как это делает
документация по CodeIgniter.

Документация пишется разработчиками. Пожелания принимаются. Перевод осуществляется
несколькими командами разработчиков. Делается это централизованно с использованием
SVN. Вступить в команду переводчиков может любой желающий.

Совместимость


Yii написан на PHP5.2 (с PHP5.3 тоже работает) и не поддерживает PHP4. Используется
довольно много нового для PHP5.2 функционала. Для работы необходим PDO.

CodeIgniter совместим с PHP4 и использует PHP как раз на уровне четвёртой версии. На PHP5.3 пока не заводится.

Скорость


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

Итог


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

Если я что-то упустил или есть желание узнать, как обстоят дела с другими возможностями в CodeIgniter или Yii — задавайте вопросы в комментариях.
Tags:
Hubs:
Total votes 69: ↑64 and ↓5 +59
Views 21K
Comments Comments 132