Недостатки Code Igniter
Около года назад я окончательно решил прекратить использование Code Igniter в новых проектах. Почему? Посмотрим на список недостатков.
Auth
А точнее полное отсутствие механизмов авторизации, аутентификации и проверки прав. 5 лет назад – это было приемлемо. Но на дворе 2012 год. В подавляющем большинстве PHP фреймворков все это есть «из коробки». Даже если позиционировать себя как «фреймворк для новичков», необходимо показать простой метод авторизации. В большинстве случаев после предварительного ознакомления новички уходят в более продвинутые фреймворки (чаще всего ими являются Kohana и FuelPHP как наиболее схожие по структуре кода).
ORM
Популярный механизм доступа к данным. Стандартного решения «из коробки» нет. Еще один повод сменить фреймворк.
View
О недостатках стандартной библиотеки View я уже писал: Недостатки View в Code Igniter. Я также писал о библиотеках для замены View: Обзор библиотек для замены View в Code Igniter.
$CI =& get_instance()
Вы просто не представляете, сколько неудобств в свое время мне доставила эта строчка. Сколько часов было потрачено в поисках ошибок и переписывании кода. Для тех, кто не понимает, о чем речь, поясню. В Code Igniter все операции производятся с главным объектом. Надо загрузить библиотеку?
$this->load->library('library'); $this->library->do_something(); |
Надо загрузить модель?
$this->load->model('mymodel'); $this->mymodel->do_something() |
Немного неудобно, но привыкаешь… Пока не начинаешь работать с хуками, хелперами и некоторыми библиотеками. Чтобы получить доступ к главному объекту, нужно получить его инстанс, и код превращается в нечто похожее:
$CI =& get_instance(); $CI->load->model('mymodel'); $CI->mymodel->do_something(); |
Для примера, если в FuelPHP необходимо вызывать метод модели:
Model\Mymodel::do_something() |
Мелочи
В Code Igniter нет HMVC, нормального кэширования, кодогенерации, консоли, присутствует мертвый код «для совместимости со старыми версиями PHP» и многое многое другое. Я не придираюсь. Я просто устал скачивать и настраивать тонну библиотек для исправления всех недочетов.
Послесловие
Code Igniter – хороший фреймворк. В нем много чего нет. Но может того, что нет, вам и не надо? А если надо, то может есть доступные библиотеки? В какой-то момент я понял, что Code Igniter – не для меня. Что я перерос его. И я нашел новый инструмент для своих проектов: FuelPHP.
Почему FuelPHP а не Yii? Аналогично стою перед выбором — «тащить дальше» или «бросить». Для миграции не могу определиться между FuelPHP и Yii.
@ghost
FuelPHP — сильно похож на CI.
А Yii — другой. Это, кончено, PHP-фреймворк с MVC структурой. Но все же другой.
Еще можно посмотреть на Laravel.
В любом случае, вам никто не даст 100% ответа. Нужно потратить пару вечеров. Попробовать альтернативы.
yii счас самый перспективный, быстрый ну и наверное лучший на сегодняшний день. Гавно монстры типа zenda и симфони отдыхают
@Alex
Назвать zend и symfony говном — кощунство. это 2 наиболее перспективных фреймворка на данный момент. другое дело что порог вхождения для них значительно выше того же yii
А есть примеры приложений, использующие FuelPHP? Что-то не дается он мне как CI.
И возможно ли нормально работать с FuelPHP без Oil?
Посмотрите на официальном форуме: http://fuelphp.com/forums/categories/applications
Я бы даже сказал — что нужно работать без кодогенерации.
Кодогенерация помогает ускорять разработку. Но если вы не понимаете сгенерированный код (или сами не можете его воспроизвести) — то все это только во вред.
Настоятельно рекомендую попробовать все ручками.
Я пишу многие свои проекты на разных фреймворках. Использую и Yii, и CodeIgniter, Zend Framework 2. Но Codeigniter действительно просто и понятен изначально…
А чем руководствуетесь в выборе фреймворка?
@Роман
Руководствуюсь заказчиком и своими предпочтениями. Все зависит от проекта и его ТЗ. Если проект сложный, то стараюсь выбрать фреймворк с модулями и различными уже написанными плагинами. Или наоборот, если нужен простой и легковесный…
Перепробовал уже и Fuel, и Symfony, в итоге укатился на RubyOnRails и счастлив =)
Зачем перегружать постоянно ?
Вить есть другие методы:
$this->load->model(‘mymodel’);
$this->mymodel->mymethod();