Сравнение Yii с CodeIgniter
Раздел:
Programming /
PHP
@
23.08.2009 |
Ключевые слова: php yii codeigniter фреймфорк framework
Автор: samdark Источник: habrahabr
Как-то я пообещал сравнить 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, myCoolAction() против 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 — задавайте вопросы в комментариях.
Это интересно:
Распечатать статью
Вернуться в раздел:
Programming /
PHP
Реклама:
|