CodeIgniter
Тип |
Программный каркас для создания веб-приложений |
---|---|
Автор |
EllisLab, Inc. |
Разработчик | |
Операционная система | |
Последняя версия | |
Состояние |
в активной разработке |
Лицензия |
CodeIgniter License Agreement[2] |
Сайт |
[www.codeigniter.com/ eigniter.com] |
CodeIgniter — популярный MVC фреймворк с открытым исходным кодом, написанный на языке программирования PHP, для разработки полноценных веб-систем и приложений. Разработан компанией EllisLab , а также Риком Эллисом (Rick Ellis) и Полом Бурдиком (Paul Burdick).
Текущая стабильная версия CodeIgniter’а (CodeIgniter 2.x), как и более ранние версии, распространяются под проприетарной лицензией в стиле Apache/BSD, однако разрабатываемая сейчас ветвь CodeIgniter 3 перелицензирована под MIT[3].
Содержание
История
Первый публичный релиз фреймворка произошёл 28 февраля 2006 года. С выходом версии 2.0 28-го января 2011 года CodeIgniter разделился на две ветки:
- CodeIgniter Core — ветка, которая делает акцент на стабильности, в связи с чем развивается медленно. Эта версия фреймворка является ядром популярной CMS ExpressionEngine 2.0.
- CodeIgniter Reactor — ветка, которую развивает сообщество. Эта ветка развивается быстро и содержит самые новые возможности.
9 июля 2013 года компания-разработчик в своём блоге разместила пост о поиске нового владельца для фреймворка [ellislab.com/blog/entry/ellislab-seeking-new-owner-for-codeigniter EllisLab Seeking New Owner for CodeIgniter].
6 октября 2014 года EllisLab объявил, что CodeIgniter продолжит своё развитие под руководством Технологического Института Британской Колумбии.
30 марта 2015 года вышла версия CodeIgniter 3.0.0
Изменения версии:
- Каркас выпущен под лицензией MIT
- Драйверы баз данных прошли огромный рефакторинг
- PDO является полностью функциональной с subdrivers
- Появилась новая библиотека сессии
- Появилась новая библиотека шифрования
- Блок тестирования был доукомплектован, улучшено покрытие кода
- Для работы рекомендуется PHP 5.4 или новее, но Codeigniter по-прежнему может работать на PHP 5.2.4
8 октября 2015 года вышла версия CodeIgniter 3.0.2
31 октября 2015 года был выпущен CodeIgniter 2.2.6, и выпуск безопасности для 2.x версий.
Изменения в версии:
- Исправлены XSS уязвимости в библиотеке безопасности метода xss_clean ().
- Изменен метод конфигурации библиотеки base_url (), возврат к $ _SERVER ['server_addr'] для того, чтобы избежать инъекции заголовка узла.
- Изменен помощник CAPTCHA.
Это последнее планируемое обновление для CodeIgniter 2x, которое достигло окончании срока службы.
1 ноября 2015 года была выпущена версия CodeIgniter 3.0.3 с патчами и некоторыми мелкими деталями. Это версия рекомендуется для всех пользователей версии 3x.
Особенности
- CodeIgniter отличает простота[4], которая достигается благодаря следующим факторам:
- Качественная и полная документация с примерами, а также большое сообщество и Wiki[4][5]
- Множество видео-уроков, которые можно найти как на официальном сайте, так и на сторонних ресурсах[6][7][8][9]
- Фреймворк дает свободу программисту, не создавая каких-либо структурных ограничений и конвенций
- Программисту не требуется учиться пользоваться генераторами кода из командной строки
- CodeIgniter работает практически на любом хостинговом плане, который имеет поддержку PHP версии 5.1 и выше
- CodeIgniter считается одним из быстрых и не требовательных к ресурсам фреймворков[5][10]
- Малый размер дистрибутива[5] (размер версии 2.1.1 составляет всего 2.2 МБ)
- Фреймворк позволяет отказаться от моделей (несмотря на то, что это не приветствуется и не является хорошей практикой)
- Документация CodeIgniter пропагандирует «толстые» контроллеры и «тонкие» модели. Валидация и построение бизнес-логики происходят в основном в контроллере. Несмотря на это, фреймворк дает свободу разработчику, поэтому он может самостоятельно выбрать подход к разработке приложения
Возможности
- Поддержка баз данных MySQL, PostgreSQL, MSSQL, SQLite, Oracle.
- Поддержка псевдо-ActiveRecord, который по большей части повторяет синтаксис языка SQL
- Легко расширяемая система за счет возможности использования сторонних и самописных библиотек, а также дополнения или переопределения существующих.
- Поддержка как сегментированных ЧПУ, так и обычных URL-ов с передачей параметров.
- Фреймворк содержит в себе множество необходимых библиотек, которые создают функциональность для работы с файлами, отправки электронных писем, валидации форм, поддержки сессий, работы с изображениями и так далее.
- Обладает возможностью кеширования на стороне сервера SQL-запросов и генерируемых html-страниц. С версии 2.0 для кеширования могут использоваться XCache или APC.
- В 2011 году появился менеджер пакетов под названием Sparks, который позволяет легко установить сторонние библиотеки с помощью командной строки.
- В 2011 году появилось дополнение, которое делает возможным поддержку миграций.
- Поддержка модульности (HMVC) с помощью дополнений
- Несмотря на отсутствие ORM в стандартом пакете, существует возможность использования PHP ActiveRecord, Doctrine, Propel и некоторых других ORM после небольших изменений или дополнений в исходном коде фреймворка
- По умолчанию CodeIgniter не использует шаблонизаторы, но есть возможность использовать его собственный или один из альтернативных шаблонизаторов (Smarty[11], TinyButStrong[12]).
Примеры кода
Active Record
Выбрать все из таблицы
$this->db->get('table_name');
Эквивалент SQL:
SELECT * FROM `table_name`
Пример с операторами JOIN и LIMIT =
public function getData($id = 0, $offset = 0, $limit = 30) {
$result = $this->db->select('table1.id, table2.name')
->from('table1')
->join('table2', 'table2.id=table1.id', 'left');
if ($id)
return $result->where('table1.id', (int)$id)->limit(1)->get()->row();
else
return $result->limit($limit, $offset)->get()->result();
}
Сценарий 1 (когда $id = 0):
Данные: $id = 0, $offset= 10, $limit = 30
SQL на выходе:
SELECT table1.id, table2.name
FROM table1
LEFT JOIN table2 ON table2.id = table1.id
LIMIT 10, 30
Функция вернет массив объектов. (db->result())
Сценарий 2 ($id отличен от нуля):
Данные: $id = 5, $offset = 0, $limit = 30
SQL на выходе:
SELECT table1.id, table2.name
FROM table1
LEFT JOIN table2 ON table2.id = table1.id
WHERE table1.id = 5
LIMIT 1
Функция вернет один объект (db->row()
)
Критика фреймворка
<imagemap>: неверное или отсутствующее изображение |
В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 4 августа 2012 года. |
- Иногда CodeIgniter критикуют за необычную с точки зрения объектно-ориентированного проектирования архитектуру.
- Некоторые приверженцы CakePHP считают, что свобода, предоставляемая программисту в CodeIgniter, поощряет расхлябанный стиль программирования.
- Модели в CodeIgniter по умолчанию не поддерживают ORM.
- Класс для работы с базами данных практически невозможно расширять и изменять из-за плохо продуманной архитектуры.
- Несмотря на то, что данный фреймворк используют многие профессиональные разработчики и веб-студии, многие считают, что CodeIgniter подходит только новичкам.
Влияние CodeIgniter
CodeIgniter послужил базой для таких фреймворков, как Kohana и Rain Framework , многие идеи CodeIgniter применены во фреймворках Fuel PHP[13] и CodeLighter[14].
Фреймворк Kohana изначально был ветвью CodeIgniter и был создан с целью использования всех возможностей PHP5 с сохранением простоты и высокой производительности CodeIgniter. Он отличался от CodeIgniter отсутствием поддержки PHP4 и наличием некоторых дополнительных библиотек (ORM, Auth и других). Если версии Kohana 2.x все ещё чем-то были схожи с CodeIgniter, то современные версии (3.x) фактически не имеют с ним ничего общего, кроме истории.
На CodeIgniter основано множество CMS: Fuel CMS[15], MaxSite CMS[16], Cogear[17], PyroCMS[18], ImageCMS и другие.
Напишите отзыв о статье "CodeIgniter"
Ссылки
- [codeigniter.com/ codeigniter.com] (англ.) — Сайт фреймворка
- [forum.codeigniter.com/ Официальный форум] (англ.)
- [www.codeigniter.com/docs Документация] (англ.)
- [cidocs.ru cidocs.ru] (рус.) — Активный проект перевода документации на русский язык
- [code-igniter.ru/ code-igniter.ru] (рус.) — Документация на русском языке для версии 1.6.3
- [code-igniter.ru/forum/ Форум] (рус.)
- [code-igniter.ru/wiki/ Wiki-раздел] (рус.)
- [code.google.com/p/codelighter/ CodeLighter] — Легковесный фреймворк использующий идеологию, синтаксис, модули и плагины Codeigniter’a
- [getsparks.org/ Sparks] (англ.) — Сайт менеджера пакетов Sparks
- [philsturgeon.co.uk/ philsturgeon.co.uk] (англ.) — Блог Фила Старджена (Phil Sturgeon) — одного из активных разработчиков фреймворка
- [hackerone.com/codeigniter CodeIgniter на HackerOne] - Исследование безопасности CodeIgniter на HackerOne
Проекты, выполненные на CodeIgniter
[tranquillpoet.com tranquillpoet.com] (англ.) — IDE для поэтов, исходники доступны на GitHub
- [projectbubble.com/ Project Bubble — система управления проектами ] (англ.)
См. также
Примечания
- ↑ [forum.codeigniter.com/thread-65803.html CodeIgniter 3.1.0 Released]
- ↑ [codeigniter.com/user_guide/license.html CodeIgniter License Agreement]
- ↑ [github.com/bcit-ci/CodeIgniter/blob/develop/user_guide_src/source/license.rst CodeIgniter/license.rst at develop · bcit-ci/CodeIgniter · GitHub]
- ↑ 1 2 [setti.biz/574/ CodeIgniter vs. CakePHP]. [www.webcitation.org/65oNJ006c Архивировано из первоисточника 29 февраля 2012]. (рус.)
- ↑ 1 2 3 [devtrench.com/posts/codeigniter-vs-symfony CodeIgniter vs Symfony]. [www.webcitation.org/65oNKBxFf Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ [codeigniter.com/tutorials/ CodeIgniter Video Tutorials]. [www.webcitation.org/65oNLP4Pj Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ [derekallard.com/blog/post/more-codeigniter-video-tutorials-from-the-community CodeIgniter Video Tutorials By Community]. [www.webcitation.org/65oNM0Prj Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ [net.tutsplus.com/articles/news/codeigniter-from-scratch-day-1/ CodeIgniter From Scratch]. [www.webcitation.org/65oNMgYU3 Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ [net.tutsplus.com/articles/news/easy-development-with-codeigniter/ Easy Development With CodeIgniter]. [www.webcitation.org/65oNNlH9T Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ [pr0digy.com/codeigniter/benchmark-update-static-cake-codeigniter-kohana/ Benchmark update: Cake vs. CodeIgniter vs. Kohana]. Pr0digy.com (3 сентября 2008). Проверено 24 июля 2009. [www.webcitation.org/65oNOo2JB Архивировано из первоисточника 29 февраля 2012]. (англ.)
- ↑ Известно несколько решений, см., к примеру [totoiono.enkidu.ru/prikruchivaem-smarty-k-codeigniter Прикручиваем Smarty к CodeIgniter]
- ↑ [codeigniter.com/wiki/TinyButStrong_Template_Engine/ TinyButStrong Template Engine]
- ↑ [fuelphp.com/ FUEL — A simple, flexible, community driven PHP5.3 framework]
- ↑ [code.google.com/p/codelighter/ codelighter] Codeigniter light! Simple, small and lightweight php5 codeigniter-like framework
- ↑ [www.getfuelcms.com/ FUEL CMS: A Rapid Development CodeIgniter CMS]
- ↑ [max-3000.com Официальный сайт Maxsite CMS. Бесплатная система управления сайтом.]
- ↑ [cogear.ru cogear — система управления сайтами, бесплатная cms для социальной сети]
- ↑ [pyrocms.com/ PyroCMS — The modular open-source CodeIgniter CMS]
|
Отрывок, характеризующий CodeIgniter
Чрез несколько дней после отъезда Анатоля, Пьер получил записку от князя Андрея, извещавшего его о своем приезде и просившего Пьера заехать к нему.Князь Андрей, приехав в Москву, в первую же минуту своего приезда получил от отца записку Наташи к княжне Марье, в которой она отказывала жениху (записку эту похитила у княжны Марьи и передала князю m lle Вourienne) и услышал от отца с прибавлениями рассказы о похищении Наташи.
Князь Андрей приехал вечером накануне. Пьер приехал к нему на другое утро. Пьер ожидал найти князя Андрея почти в том же положении, в котором была и Наташа, и потому он был удивлен, когда, войдя в гостиную, услыхал из кабинета громкий голос князя Андрея, оживленно говорившего что то о какой то петербургской интриге. Старый князь и другой чей то голос изредка перебивали его. Княжна Марья вышла навстречу к Пьеру. Она вздохнула, указывая глазами на дверь, где был князь Андрей, видимо желая выразить свое сочувствие к его горю; но Пьер видел по лицу княжны Марьи, что она была рада и тому, что случилось, и тому, как ее брат принял известие об измене невесты.
– Он сказал, что ожидал этого, – сказала она. – Я знаю, что гордость его не позволит ему выразить своего чувства, но всё таки лучше, гораздо лучше он перенес это, чем я ожидала. Видно, так должно было быть…
– Но неужели совершенно всё кончено? – сказал Пьер.
Княжна Марья с удивлением посмотрела на него. Она не понимала даже, как можно было об этом спрашивать. Пьер вошел в кабинет. Князь Андрей, весьма изменившийся, очевидно поздоровевший, но с новой, поперечной морщиной между бровей, в штатском платье, стоял против отца и князя Мещерского и горячо спорил, делая энергические жесты. Речь шла о Сперанском, известие о внезапной ссылке и мнимой измене которого только что дошло до Москвы.
– Теперь судят и обвиняют его (Сперанского) все те, которые месяц тому назад восхищались им, – говорил князь Андрей, – и те, которые не в состоянии были понимать его целей. Судить человека в немилости очень легко и взваливать на него все ошибки другого; а я скажу, что ежели что нибудь сделано хорошего в нынешнее царствованье, то всё хорошее сделано им – им одним. – Он остановился, увидав Пьера. Лицо его дрогнуло и тотчас же приняло злое выражение. – И потомство отдаст ему справедливость, – договорил он, и тотчас же обратился к Пьеру.
– Ну ты как? Все толстеешь, – говорил он оживленно, но вновь появившаяся морщина еще глубже вырезалась на его лбу. – Да, я здоров, – отвечал он на вопрос Пьера и усмехнулся. Пьеру ясно было, что усмешка его говорила: «здоров, но здоровье мое никому не нужно». Сказав несколько слов с Пьером об ужасной дороге от границ Польши, о том, как он встретил в Швейцарии людей, знавших Пьера, и о господине Десале, которого он воспитателем для сына привез из за границы, князь Андрей опять с горячностью вмешался в разговор о Сперанском, продолжавшийся между двумя стариками.
– Ежели бы была измена и были бы доказательства его тайных сношений с Наполеоном, то их всенародно объявили бы – с горячностью и поспешностью говорил он. – Я лично не люблю и не любил Сперанского, но я люблю справедливость. – Пьер узнавал теперь в своем друге слишком знакомую ему потребность волноваться и спорить о деле для себя чуждом только для того, чтобы заглушить слишком тяжелые задушевные мысли.
Когда князь Мещерский уехал, князь Андрей взял под руку Пьера и пригласил его в комнату, которая была отведена для него. В комнате была разбита кровать, лежали раскрытые чемоданы и сундуки. Князь Андрей подошел к одному из них и достал шкатулку. Из шкатулки он достал связку в бумаге. Он всё делал молча и очень быстро. Он приподнялся, прокашлялся. Лицо его было нахмурено и губы поджаты.
– Прости меня, ежели я тебя утруждаю… – Пьер понял, что князь Андрей хотел говорить о Наташе, и широкое лицо его выразило сожаление и сочувствие. Это выражение лица Пьера рассердило князя Андрея; он решительно, звонко и неприятно продолжал: – Я получил отказ от графини Ростовой, и до меня дошли слухи об искании ее руки твоим шурином, или тому подобное. Правда ли это?
– И правда и не правда, – начал Пьер; но князь Андрей перебил его.
– Вот ее письма и портрет, – сказал он. Он взял связку со стола и передал Пьеру.
– Отдай это графине… ежели ты увидишь ее.
– Она очень больна, – сказал Пьер.
– Так она здесь еще? – сказал князь Андрей. – А князь Курагин? – спросил он быстро.
– Он давно уехал. Она была при смерти…
– Очень сожалею об ее болезни, – сказал князь Андрей. – Он холодно, зло, неприятно, как его отец, усмехнулся.
– Но господин Курагин, стало быть, не удостоил своей руки графиню Ростову? – сказал князь Андрей. Он фыркнул носом несколько раз.
– Он не мог жениться, потому что он был женат, – сказал Пьер.
Князь Андрей неприятно засмеялся, опять напоминая своего отца.
– А где же он теперь находится, ваш шурин, могу ли я узнать? – сказал он.
– Он уехал в Петер…. впрочем я не знаю, – сказал Пьер.
– Ну да это всё равно, – сказал князь Андрей. – Передай графине Ростовой, что она была и есть совершенно свободна, и что я желаю ей всего лучшего.
Пьер взял в руки связку бумаг. Князь Андрей, как будто вспоминая, не нужно ли ему сказать еще что нибудь или ожидая, не скажет ли чего нибудь Пьер, остановившимся взглядом смотрел на него.
– Послушайте, помните вы наш спор в Петербурге, – сказал Пьер, помните о…
– Помню, – поспешно отвечал князь Андрей, – я говорил, что падшую женщину надо простить, но я не говорил, что я могу простить. Я не могу.
– Разве можно это сравнивать?… – сказал Пьер. Князь Андрей перебил его. Он резко закричал:
– Да, опять просить ее руки, быть великодушным, и тому подобное?… Да, это очень благородно, но я не способен итти sur les brisees de monsieur [итти по стопам этого господина]. – Ежели ты хочешь быть моим другом, не говори со мною никогда про эту… про всё это. Ну, прощай. Так ты передашь…
Пьер вышел и пошел к старому князю и княжне Марье.
Старик казался оживленнее обыкновенного. Княжна Марья была такая же, как и всегда, но из за сочувствия к брату, Пьер видел в ней радость к тому, что свадьба ее брата расстроилась. Глядя на них, Пьер понял, какое презрение и злобу они имели все против Ростовых, понял, что нельзя было при них даже и упоминать имя той, которая могла на кого бы то ни было променять князя Андрея.
За обедом речь зашла о войне, приближение которой уже становилось очевидно. Князь Андрей не умолкая говорил и спорил то с отцом, то с Десалем, швейцарцем воспитателем, и казался оживленнее обыкновенного, тем оживлением, которого нравственную причину так хорошо знал Пьер.
В этот же вечер, Пьер поехал к Ростовым, чтобы исполнить свое поручение. Наташа была в постели, граф был в клубе, и Пьер, передав письма Соне, пошел к Марье Дмитриевне, интересовавшейся узнать о том, как князь Андрей принял известие. Через десять минут Соня вошла к Марье Дмитриевне.
– Наташа непременно хочет видеть графа Петра Кирилловича, – сказала она.
– Да как же, к ней что ль его свести? Там у вас не прибрано, – сказала Марья Дмитриевна.
– Нет, она оделась и вышла в гостиную, – сказала Соня.
Марья Дмитриевна только пожала плечами.
– Когда это графиня приедет, измучила меня совсем. Ты смотри ж, не говори ей всего, – обратилась она к Пьеру. – И бранить то ее духу не хватает, так жалка, так жалка!
Наташа, исхудавшая, с бледным и строгим лицом (совсем не пристыженная, какою ее ожидал Пьер) стояла по середине гостиной. Когда Пьер показался в двери, она заторопилась, очевидно в нерешительности, подойти ли к нему или подождать его.
Пьер поспешно подошел к ней. Он думал, что она ему, как всегда, подаст руку; но она, близко подойдя к нему, остановилась, тяжело дыша и безжизненно опустив руки, совершенно в той же позе, в которой она выходила на середину залы, чтоб петь, но совсем с другим выражением.
– Петр Кирилыч, – начала она быстро говорить – князь Болконский был вам друг, он и есть вам друг, – поправилась она (ей казалось, что всё только было, и что теперь всё другое). – Он говорил мне тогда, чтобы обратиться к вам…
Пьер молча сопел носом, глядя на нее. Он до сих пор в душе своей упрекал и старался презирать ее; но теперь ему сделалось так жалко ее, что в душе его не было места упреку.
– Он теперь здесь, скажите ему… чтобы он прост… простил меня. – Она остановилась и еще чаще стала дышать, но не плакала.
– Да… я скажу ему, – говорил Пьер, но… – Он не знал, что сказать.
Наташа видимо испугалась той мысли, которая могла притти Пьеру.
– Нет, я знаю, что всё кончено, – сказала она поспешно. – Нет, это не может быть никогда. Меня мучает только зло, которое я ему сделала. Скажите только ему, что я прошу его простить, простить, простить меня за всё… – Она затряслась всем телом и села на стул.
Еще никогда не испытанное чувство жалости переполнило душу Пьера.
– Я скажу ему, я всё еще раз скажу ему, – сказал Пьер; – но… я бы желал знать одно…
«Что знать?» спросил взгляд Наташи.
– Я бы желал знать, любили ли вы… – Пьер не знал как назвать Анатоля и покраснел при мысли о нем, – любили ли вы этого дурного человека?
– Не называйте его дурным, – сказала Наташа. – Но я ничего – ничего не знаю… – Она опять заплакала.
И еще больше чувство жалости, нежности и любви охватило Пьера. Он слышал как под очками его текли слезы и надеялся, что их не заметят.
– Не будем больше говорить, мой друг, – сказал Пьер.
Так странно вдруг для Наташи показался этот его кроткий, нежный, задушевный голос.
– Не будем говорить, мой друг, я всё скажу ему; но об одном прошу вас – считайте меня своим другом, и ежели вам нужна помощь, совет, просто нужно будет излить свою душу кому нибудь – не теперь, а когда у вас ясно будет в душе – вспомните обо мне. – Он взял и поцеловал ее руку. – Я счастлив буду, ежели в состоянии буду… – Пьер смутился.