CodeIgniter — framework для новичков

Framework CodeIgniter я выбрал для изучения, потому что он оказался наиболее простым в изучении и менее болезненным в оклиматизации, после опыта голого php-программирования. Поскольку кроме php, я не знаю ниодного сервеного скриптового языка (не считая пройденых ознакомительных туториалов по ruby и python), то для повышения квалификации web-программиста на выбор встали только php-framework‘и. Не буду рассказывать из чего я выбирал, если написать в поисковике «php framework» — сами найдёте, какие они бывают.
Скажу лишь, по каким критериям я выбирал:
- Всё на php. Без своего шаблонного парсинга
- Без излишних специфических особенностей синтаксиса
- Гибкость (читай «нестрогость»)
- Совместимость с большенством хостингов
- Без заморочек с конфигурацией
- Высокая скорость работы
- Rewrite engine
- Userfriendly для не слишком глубоко знающих php
- Полная и понятная документация
CodeIgniter подходит по всем параметрам.
Хостинг
- PHP версии 4.3.2 или выше
- База занных (MySQL, MySQLi, MS SQL, Postgre, Oracle, SQLite, ODBC)
Скорость работы
Разработчики заявляют, что очень немногие framework‘и могут сравниться с CodeIgniter по скорости. В большем случае из-за динамического подключения встроеных классов и библиотек, и опять же, без лишних заморочек со всякими yaml-файлами, определяющими структуру базы данных.
M-V-C
CodeIgniter использует ставший уже стандартом «Model-View-Controller» подход, который позволяет разделить логическое формирование и обработку данных от их представления. В принципе, не мне вам всем объяснять для чего это нужно и думаю не нужно перечислять плюсы при работе над web-приложением в команде.

Плюс CodeIgniter в нестрогом соблюдении этого метода, поскольку компонент Model предназначен не только для работы с базой, но и для любых манипуляций с данными. Можно рассматривать Model, как функциональную составляющую, а Controller, как процедурную. Таким образом можем условно определить framework, как систему использующую смешанный (процедурно-функционально-объектно-ориентированный) вид программирования.
Компонент View, для отображения данных не использует никаких своих скриптов псевдокодов и псевдотэгов. Controller передаёт в компонент View набор переменных для манипуляции, которые отображаются средствами php.
mod_rewrite — модная_перезапись
Нынче адреса, написаные почти человеческим языком не просто модны, но и важны в индексации. Разработчики CodeIgniter просто включили эту функциональность по-умолчанию, никого не спрашивая. Единственное, что нужно будет настроить в конфигурации — показывать index.php или нет.
URL-адрес выглядит примерно так:
www.your-site.com/controller/function/somevar
Логика url-ов здесь проста и понятна:
- первый сегмент — имя контроллера (как правило, это имя класса и файла контроллера)
- второй сегмент — имя функции в контроллере (если сегмент не указан, обращение идёт к базовой функции контроллера — index)
- третий, четвёртый, пятый и т. д. — просто сегменты, которые могут быть прочитаны встроеным методом
Не нравится такая последовательность? Пожалуйста, можете переписать с помощью routing — php-файла, в котором записывается настройка переадресации url-адресов.
Работа с базой данных
А здесь я долго смеялся, когда читал документацию посвящённую работой с базами данных. Дело в том, что язык SQL и так весьма лаконичен и понятен, что изобретать что-то новое по-моему нет смысла. Так же решили и разработчики, предоставив такое решение для работы с базами данных:
$this->db->select('title, content, date');
$this->db->from('mytable');
$this->db->where('date <', $now);
$this->db->where('title', $title);
$query = $this->db->get();
// Получаем: SELECT title, content, date FROM mytable WHERE date < '2007-10-10 12:03' AND title = 'WTF?';
Из кода думаю всё понятно.
Примечание: как мне нравится обращение к функциям классов! Только гляньте:
$this->load->model('My_model'); // загрузка Model
$result = $this->db->get(); // получение данных из базы
$myvar = $this->uri->segment(3); // получение значения третьего сегмента url-адреса
И тому подобные обращения.
Документация
Документация описывает почти все особености работы с системой, встроеными классами, библиотеками, хелперами. Весьма подробная и написаная понятным английским языком с примерами. Кроме того, существует wiki-документация, которая содержит ньюансы подключения и работы плагинов и внешних библиотек. Ну и куда же без форума.






]]>zigmat]]>Эмм… Мне до сих пор лень глубже изучить php
»]]>Никита]]>zigmat, тогда этот фреймворк подойдёт. Один вечер посидеть почитать документацию и уже можно писать приложения.
»]]>mixaM]]>только не ModeRewrite, a mod_rewrite.
»]]>Никита]]>mixaM, да, точно. Спасибо, исправил.
»]]>Danaki]]>http://blog.gate.lv/2006/11/29.....o-cakephp/
»]]>Денис Радченко]]>Логотип у него 100% Feedburner
»]]>Никита]]>Спасибо, Danaki, хороший обзор.
»Денис Радченко, не согласен. У feedburner’a считаю вообще ужасный логотип, там синий цвет непонятно зачем. А у CodeIgniter’a очень даже оригинальный логотип. Две одинаковые формы огня, одна поменьше в другой побольше, причём внутренняя отражена.
]]>Vladimir Rusinov]]>Похоже у него работа с БД сделана совсем по-дурацки (интересно, а как там насчет работы с Foreign Keys?).
»SQL конечно стандартизирован, но у каждой реализации все же есть различия. Поэтому лучше бы пользоваться каким-нибудь ORM (типа SqlAlchemy для Python), к тому же это гораздо удобнее – работать с объектами, которые сами селектятся, апдейтятся и инсертятся, чем с таблицами и запросами.
]]>Никита]]>Работа с БД – это тот же mysql-запрос, переведённый в php. Насчёт Foreign Keys, не знаю. Не использую.
Что-то не впечатлил меня SqlAlchemy, помоему хуже выглядит, чем эти запросы.
“No command line. No YAML. Just clean, well documented, OOP/MVC PHP with a handful of libraries and helpers”
»Отсюда: http://codeigniter.com/forums/viewreply/259300/
]]>Danaki]]>Никита, Владимир имел в виду ORM, такой как, например ActiveRecord. В Игнайтере разве ничего похожего нет?
»]]>Никита]]>ActiveRecord есть, но он приближен к SQL запросу,
подробнее здесь: http://codeigniter.com/user_gu.....ecord.html
результатом этого запроса является объект (хотя можно сделать и массив) с данными.
»]]>Vladimir Rusinov]]>> Насчёт Foreign Keys, не знаю. Не использую.
А наверное зря. Очень сложно не забыть про все ссылки при удалении объекта из базы.
»]]>PHP: Обзор PHP-framework’а CodeIgniter » Wake Up!]]>[...] Краткое описание PHP-framework’а CodeIgniter [...]
»]]>larin]]>Vladimir Rusinov,
>>> Поэтому лучше бы пользоваться каким-нибудь ORM (типа SqlAlchemy для Python)
Это конечно удобно… но пока все известные мне ORM на PHP, довольно тормознутые… и в большом проекте их использование, дело рисковое…
Вы знаете, какую нибудь шуструю ORM на PHP?
Вот ОЧЕНЬ мощная ORM: http://www.phpdoctrine.net, но такая тормознутая, что просто жуть!
»]]>Никита]]>Об этом я и говорил, что для CI главное скорость работы.
»]]>larin]]>Никита, это главное до поры до времени, но хочется найти компромис. Чтобы и скорость работы скрипта не страдала и что бы разработку вести было приятно и быстро…
»ИМХО, CI немного не дотягивает до хорошего FW – у него не достаточно хорошо реализована часть Model.
Но для небольших, клиентских сайтом, этот FW мне кажется лучший. =)
]]>Никита]]>Поэтому я и назвал его “framework для новичков”
»]]>larin]]>Никита, я же вам ничего не говорю против. Я просто думал, что в дискуссии мне кто-нить подскажет хорошую ORM || хороший FW (с указание скорости работы). Пока же для меня хорошим FW остается Zend FrameWork. По мне в нем есть баланс между скоростью работы и скоростью разработки.
»]]>Никита]]>Если нужен серьёзный framework, то могу порекомендовать symfony. Хотя, я не знаю как у него со скоростью работы. Но есть хороший мануал и возможности промышленного масштаба.
»]]>larin]]>Symfony будет прожорливее ZF более чем в 2 раза. Вот http://paul-m-jones.com/blog/?p=236 тестирование различных FW, в конце есть сравнительная табличка. Хотя… по данным тестам можно считать Symfony золотой серединой.
Никита, а вы сами пользуетесь каким либо FW?
»]]>Никита]]>Интересные результаты.
Лично я не программист в полном смысле этого слова. Просто хотелось, что-то изучить наиболее простое, но в то же время функциональное, чтобы попробовать создать сервис, который сейчас в пробном режиме работает на http://semantika.lv
»]]>LARIN.in » Архив блога » Меломанам посвящается…]]>[...] блоге Никиты Селецкого зашел у нас разговор о Symfony [...]
»]]>Slava]]>Подскажите, а freimwork это сборник классов я так понимаю?
»Вот вроде pear тоже сборник классов на php, вот в нем например уязвимости бывают.
А как с этим вопросом тут обстоят дела?
]]>Никита]]>Slava, фреймворк — это простая концептуальная структура, используемая для решения сложной, проблемной задачи со своей концепцией создания приложений. А pear это библиотека классов более низкого уровня. Фреймворки могут использовать pear-классы для своих нужд.
Уязвимости бывают везде. Даже в самом php. Подробнее смотрите на официальном сайте фреймворка, его багтрекере и форуме.
»