
CodeIgniter служит фреймворком веб-приложений для разработчиков, которые предпочитают скорость обильному набору функций. Основная цель разработки этого PHP-фреймворка с открытым исходным кодом, согласно официальному сайту проекта, заключается в сочетании максимальной производительности и гибкости с минимально возможным программным каркасом.
- Что такое CodeIgniter?
- Верстка и структура фреймворка
- Поток приложений PHP-фреймворков
- Классы контроллеров
- Функции контроллера
- Классы моделей
- Функции модели
- Маршрутизация в CodeIgniter
- Обзор потока приложений
- Преимущества фреймворка CodeIgniter
- Недостатки фреймворка CodeIgniter
- CodeIgniter для торопливого читателя
- Заключение: Для каких проектов подходит CodeIgniter?
Что такое CodeIgniter?
CodeIgniter — это веб-фреймворк, написанный на PHP, который гордится тем, что делает разработку веб-приложений быстрее и эффективнее за счет компактного программного дизайна. CodeIgniter был создан американской компанией EllisLab. Первая версия была выпущена в феврале 2006 года. 13 июля 2013 года они объявили, что больше не смогут предоставлять необходимые ресурсы для дальнейшего развития программного обеспечения. Год спустя проект перешел под контроль Технологического института Британской Колумбии (BCIT).
Исходный код фреймворка находится под лицензией MIT и может быть получен через онлайн-сервис GitHub. Самая актуальная стабильная версия CodeIgniter 3.1.3 доступна для бесплатного скачивания на официальном сайте проекта.
Верстка и структура фреймворка
Ориентированный на производительность дизайн CodeIgniter отражается в бережливой структуре PHP-фреймворка. Она основана на паттерне архитектуры программного обеспечения Model View Controllter (MVC). Основным принципом MVC является строгое разделение программного кода и представления. Это достигается за счет модульной структуры программного обеспечения и аутсорсинга PHP-кода. Существует три центральных компонента: модель данных (Model), представление (View) и контроллер (Controller).
- Модель данных (Model) представляет собой структуру данных веб-приложения, разработанного на базе CodeIgniter. Для этого в исходном коде определяются классы модели. Они включают специальные функции, с помощью которых можно получить доступ, сохранить или обновить информацию из базы данных.
- Презентация (View) — это та часть приложения, которая представляется пользователям. Как правило, это HTML-документ, в который динамически интегрируется содержимое с помощью PHP. Представление, по сути, является разновидностью шаблона. CodeIgniter предоставляет возможность определить в представлении такие элементы веб-страницы, как верхний и нижний колонтитулы или RSS-сайты. Как правило, веб-приложения используют несколько представлений для обращения к содержимому, используя одну и ту же модель данных. Это позволяет представлять различные функции программы в разных представлениях.
- Контроллер (Controller) служит посредником между моделью, представлением и любым другим ресурсом, который необходим для обработки HTTP-запроса или динамической генерации веб-сайта. Этот компонент принимает входящие запросы, проверяет вводимые данные, выбирает нужное представление и передает содержимое, которое модель данных загрузила из базы данных.
На следующем графике схематично показано взаимодействие между компонентами MVC:

Структура MVC позволяет создать гибкий дизайн программного обеспечения, в котором отдельные программные модули могут быть заменены, пересмотрены и повторно использованы с минимальными усилиями. Изменения в одном компоненте не влияют на исходные коды других компонентов (при условии, что не вносятся изменения в интерфейсы).
Строгое разделение программной логики и представления обеспечивает четкий, хорошо структурированный программный код. Веб-приложения на основе MVC считаются удобными в обслуживании. В случае возникновения ошибки поиск ее источника обычно ограничивается только одним из компонентов.
Архитектурная модель MVC также позволяет раздельно разрабатывать логику и макет веб-приложения. Back-end и front-end разработчики работают параллельно, и приложения могут быть завершены гораздо быстрее.
CodeIgniter использует MVC, но не привязывает пользователей полностью к этой архитектурной модели. Хотя она требует использования компонентов контроллера и представления, подключение к базам данных через компонент модели является необязательным. Кроме того, приложение на базе CodeIgniter может быть выполнено с использованием иерархической архитектуры MVC (HMVC), которая следует классическому формату MVC, но добавляет иерархический компонент.
Поток приложений PHP-фреймворков
CodeIgniter основан на концепции URL. Это означает, что доступ к контроллеру, как центральному блоку управления между представлением и моделью, осуществляется путем ввода URL в строку поиска веб-браузера. Разработчики создают так называемые классы контроллеров. Это файлы PHP, содержащие различные функции, используемые для загрузки библиотек, плагинов или помощников, подключения к базам данных, интеграции модели данных или поиска определенного представления.
Поток приложений CodeIgniter основан на следующей структуре URL:
example.com/class/function/parameter
За доменом (example.com) следует класс контроллера, к которому необходимо обратиться, а также конкретная функция контроллера. Конец образуют необязательные параметры. Они используются для передачи идентификаторов контроллера или переменных.
Теоретически, URL CodeIgniter может выглядеть следующим образом:
example.com/news/article/511
Такой URL обращается к контроллеру news на домене example.com и предлагает выполнить функцию article (например, загрузить одноименное представление для представления статьи). Содержимое модели данных, которое должно быть извлечено из базы данных и передано контроллеру по URL, является необязательным параметром — в данном примере это статья с ID 511.
В конфигурации вывода CodeIgniter приводит index.php в каждом URL приложения:
example.com/index.php/news/article/511
Этот PHP-файл содержит информацию о том, где найти основные файлы фреймворка. Он также помогает найти интегрированные библиотеки, плагины или помощники, а также в каком индексе находятся файлы приложения. index.php используется для инициализации всех базовых ресурсов.
Если CodeIgniter работает на HTTP-сервере Apache, то index.php и mod_rewrite могут быть удалены из URL приложения, чтобы сделать «чистый» веб-адрес доступным для конечных пользователей и поисковых машин. Разработчики вставляют следующий блок кода в файл .htaccess веб-сервера:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Базовая структура фреймворка PHP в первую очередь поддерживает классы контроллеров, классы моделей и шаблоны представлений.
Классы контроллеров
CodeIgniter дает разработчикам возможность программировать отдельные контроллеры как классы, определяемые пользователем. Веб-разработчики создают отдельный PHP-файл для каждого контроллера в индексе application/controllers/. Контроллеры содержат программную логику веб-приложения, разработанного с помощью CodeIgniter, и создаются как подклассы класса CI_Controller. В исходном коде программисты делают это с помощью ключевого слова extends.
class News extends CI_Controller {
}
Как подкласс, News наследует все публичные и защищенные функции видимости от родительского класса CI_Controller.
Ключевые слова public, protected или private служат в PHP для определения видимости элемента или функции. Если элемент объявлен как public, то все классы в программе имеют доступ к этому элементу. Если этот доступ ограничен родительскими классами и производными классами, программисты используют ключевое слово protected. Элемент, объявленный как private, доступен только тому классу, который этот элемент определяет.
Каждый класс контроллера, определяемый пользователем, должен содержать функцию конструктора, с помощью которой можно интегрировать библиотеки, модель данных, базы данных или вспомогательные классы. Начиная с PHP5 __construct() используется в качестве стандартной функции конструктора.
<?php
class News extends CI_Controller {
public function __construct() { //defines the constructor
parent::__construct(); //retrieves the constructor of the parent class
$this->load->helper('url'); //loads a helper class for working with URLs
$this->load->helper('file'); //loads a helper class for working with the files
$this->load->database(); //loads a database
$this->load->model('News_model'); //loads a model with the name “News_model”
}
?>
В примере показан класс News как подкласс CI_Controller. Функция конструктора __construct() интегрирует два вспомогательных класса, базу данных и модель данных News_model. Выдержки отдельных строк кода приведены в исходном тексте.
Все классы контроллеров, определенные для CodeIgniter в PHP, должны начинаться с заглавной буквы (News вместо news). Однако в URL они могут быть написаны в нижнем регистре.
Функции контроллера
Если базовая основа для контроллеров, определяемых пользователем, расположена, то фактическая логика программы следует за ней в виде функций контроллера, с помощью которых могут быть получены представления или осуществлено взаимодействие с интегрированной моделью данных.
Для того чтобы контроллер мог загрузить представление, базовый HTML-документ должен быть сохранен как PHP-файл в индексе application/views/. Простое представление для представления статей может, например, выглядеть следующим образом:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title><?php echo $title; ?></title>
</head>
<body >
<h1><?php echo $headline ?></h1>
<p><?php echo $content_body ?></p>
</body>
</html>
HTML-документы, содержащие PHP-код, должны быть сохранены как PHP-файлы (.php). Это единственный способ убедиться, что интерпретатор PHP веб-сервера выполняет скрипты, а не выводит PHP-код в виде текста.
Для загрузки представления в контроллере необходима функция, определяемая пользователем. В следующем примере кода используется функция article() для загрузки представления article.php.
public function article() {
if (!file_exists(application/views/article.php)) {
show_404();
}
$this->load->view('article');
}
Код программы выглядит следующим образом: сначала CodeIgniter проверяет, содержит ли индекс application/views/ файл с именем article.php. Этот запрос реализуется с помощью языковой конструкции if и отрицательной (!) команды file exists().
Если условие выполняется и команда не находит файла с таким именем в соответствующем индексе, то if возвращает значение TRUE и CodeIgniter выполняет функцию show_404(), которая находится в разделе if. В этом случае пользователь получает уведомление о том, что запрашиваемый файл не существует. Если же команда if не выполняется и !file_exists оценивается как FALSE, то CodeIgniter инициирует функцию $this->load->view(‘article’). Она используется для загрузки соответствующего файла в виде представления в приложение.
Если файл имеет формат PHP, то нужные данные могут быть перечислены в функции view() без суффикса. Если загружаются другие форматы, то соответствующий суффикс файла обязателен.
CodeIgniter обычно используется как часть динамических веб-приложений. Они отображают пользователям динамически сгенерированные веб-страницы вместо статических HTML-сайтов. Это может быть сделано путем заполнения представления данными, которые соответствуют параметрам, переданным CodeIgniter через URL.
example.com/news/article/511
До сих пор единственный вид для отображения статьи загружался с помощью функции $this->load->view(‘article’). Но теперь необходимо специально интегрировать содержимое, которое связано с параметром 511. Мы предполагаем, что это идентификатор, который связан с конкретной новостью с помощью системы управления базой данных. Чтобы загрузить его из базы данных в программу, приведенный выше пример необходимо дополнить, чтобы обратиться к модели данных, встроенной в конструктор.
public function article($id) {
if (!file_exists(application/views/article.php)) {
show_404();
}
$data = $this->News_model->get_data($id);
$this->load->view('article', $data);}
Аргумент передаваемой функции (здесь под именем переменной $id) соответствует идентификационной части URL — например, 511. Еще не написанная функция модели get_data() используется для загрузки из базы данных содержимого статьи, связанного с ID. Метод view() вызывает представление статьи и передает ему данные в виде ассоциативного массива ($data). Модель данных News_model также передает данные контроллеру News, который передает их представлению.
Все операции, связанные с получением данных, передаются встроенной модели данных.
Классы моделей
Модели данных используются CodeIgniter для предоставления функций, которые могут быть использованы для выполнения определенных операций с базой данных. Точно так же, как и классы контроллеров, классы моделей программируются с использованием пользовательского PHP-фреймворка.
Чтобы создать класс модели, сначала нужно создать имя класса — в данном случае News_model. Как и классы контроллеров, все определенные пользователем классы моделей являются подклассами родительского класса CI_Model. Наследование осуществляется с помощью ключевого слова extends. Классы моделей также включают базы данных и другие ресурсы с помощью функции конструктора.
class News_model extends CI_Model {
public function __construct() {
parent::__construct();
$this->load->database();
}
}
Функции модели следуют этой базовой структуре, в которой разработчики определяют все операции с базой данных, которые должны быть доступны контроллеру через соответствующую модель данных.
Функции модели
Классы модели позволяют разработчикам определять отдельные функции для операций с базой данных. В приведенном выше примере мы использовали определенную пользователем функцию get_data() в классе контроллера News для загрузки содержимого статьи из базы данных в представление. В модели мы только определяем, какие операции с базой данных скрываются за функцией.
class News_model extends CI_Model {
public function __construct() {
parent::__construct();
$this->load->database();
}
public function get_data($id) {
$this->db->select('content');
$this->db->from('example_table');
$this->db->where('id', $id);
$query = $this->db->get();
return $query->result();
}
В классе модели News_model приведенная выше функция get_data() определена как операция с базой данных, которая представляет собой столбец набора данных, указанный select() с доставленным идентификационным номером ($id) из таблицы базы данных, указанной from() и возвращаемый через get() с помощью функции result() в виде массива.
Модель данных обычно предоставляет множество функций модели. Разработчики могут воспользоваться классом query builder, который включает набор предопределенных функций для классических операций с базой данных. Обзор можно найти в официальной документации по фреймворку CodeIgniter.
Маршрутизация в CodeIgniter
К какому управляющему классу и функции следует обратиться, CodeIgniter задает с помощью URL. Для этого веб-фреймворк использует структуру URL class/function/parameter. Эта базовая структура может быть адаптирована по мере необходимости. CodeIgniter предоставляет для этой цели файл routes.php в индексе application/config/. Он содержит массив под названием $route, который позволяет разработчикам определять собственные критерии маршрутизации.
В конфигурации вывода массива $route есть три записи по умолчанию: стандартный контроллер, правило маршрутизации для переопределения 404 и правило для автоматической замены дефисов (-) на символы подчеркивания (_).
$route['default_controller'] = 'home/welcome';
$route['404_override'] = 'home/welcome';
$route['translate_uri_dashes'] = FALSE;
Первая запись по умолчанию содержит стандартный контроллер приложения. Он загружается CodeIgniter всякий раз, когда URL, отличный от домена, не содержит никакой дополнительной информации о маршрутизации. В данном примере правило маршрутизации определяет класс контроллера home как стандартный контроллер. Поэтому посетители, не указавшие в URL целевую веб-страницу, перенаправляются на home и получают приветствие. Обычно это перенаправление на начальную страницу. Если ни один контроллер не определен как стандартный, то CodeIgniter показывает страницу 404-ошибки при вызове стартовой страницы.
Вторая запись по умолчанию в массиве $route определяет контроллер, который может быть вызван, когда контроллер, к которому обращается URL, не найден в файлах приложения. Правило маршрутизации $route[‘404_override’] = ‘home’ перезаписывает страницу 404-ошибки, которая обычно показывается в таком случае, и вместо этого ведет на класс контроллера home.
Третья запись по умолчанию в массиве $route предотвращает ошибки маршрутизации, основанные на дефисах. Дефис не является допустимым символом для имен классов или функций и автоматически заменяется в URL-адресах в настройках по умолчанию.
Для создания пользовательского правила маршрутизации для динамического URL у веб-разработчика есть две возможности в CodeIgniter: Записи маршрутизации для динамических URL могут быть определены с помощью подстановочных знаков (placeholders) или с помощью регулярных выражений.
В файле routes.php поддерживаются два типа подстановочных знаков:
Веб-сайты с большим количеством страниц с ошибками 404 трудноползуемы и затрудняют доступ поисковых систем к релевантным данным. Помимо влияния на пользовательский опыт это может негативно сказаться на ранжировании в поисковых системах. Как правило, веб-разработчики должны стремиться избегать страниц с ошибками 404.
Дикие символы в файле routes.php | Описание |
---|---|
:num | Функционирует как заполнитель для целых чисел (целых чисел). |
:any | Функционирует как заполнитель для строки (символов). |
В следующем примере показана запись в файле routes.php, которая позволяет удалить функцию (article) из URL:
$route['news/article/(:num)'] = 'news/$1';
Подстановочный знак :num считывает параметр динамического URL и сохраняет его в переменной $1. Если вы определяете правила маршрутизации с помощью :num или :any, то вы должны заключить их в простые скобки в routes.php.
routes.php также принимает правила маршрутизации в виде регулярных выражений. Эти два типа заполнителей можно также обозначить следующим образом:
:num corresponds to d+
:any corresponds to [^/]+
Альтернативой приведенному выше примеру может быть следующая нотация:
$route['news/article/(d+ )'] = 'news/$1';
Регулярные выражения также заключаются в скобки с помощью routes.php.
Обзор потока приложений
На следующем графике поток приложения на базе CodeIgniter представлен в виде семи шагов:

1. CodeIgniter использует index.php в качестве фронт-контроллера для входящих HTTP-запросов. Здесь инициализируются все основные ресурсы, необходимые для работы приложения.
2. В рамках маршрутизации CodeIgniter проверяет, какое действие должно быть выполнено. Для этого приложение сравнивает URL в запросе с правилами маршрутизации, определенными в файле routes.php.
3. За маршрутизацией следует кэширование. Если ответ, соответствующий запросу, содержится в кэше приложения, он доставляется непосредственно запрашивающему веб-браузеру. В противном случае, контроллер, определенный во время маршрутизации, выполняется с помощью предшествующей функции фильтрации.
4. Фреймворк CodeIgniter содержит встроенный фильтр, который перехватывает вредоносные запросы. Прежде чем приложение загрузит контроллер, соответствующий запросу, каждый HTTP-запрос проходит проверку безопасности.
5. Если запрос проходит фильтр, то выполняется контроллер. Он выбирает подходящее представление и загружает модель данных, а также все библиотеки, вспомогательные классы, плагины и скрипты, необходимые для ответа на запрос.
6. Как только все необходимые данные будут переданы в представление, его можно передать в веб-браузер.
7. Если активировано кэширование, CodeIgniter временно останавливает исходящие данные, чтобы иметь возможность напрямую отвечать на повторяющиеся запросы.
Преимущества фреймворка CodeIgniter
Имея более 13 000 звезд, CodeIgniter является весьма уважаемым проектом разработки на GitHub и занимает 3rd среди самых популярных PHP-фреймворков. Преимущества приложения заключаются в следующем:
Минимальные усилия по настройке: CodeIgniter быстро запускается. Пользователи не задерживаются надолго с настройкой фреймворка и могут приступить к разработке запланированного приложения практически сразу после установки. Усилия по настройке в основном ограничиваются настройками в config.php и индексе application/config/. Здесь пользователи определяют стандартный путь для доступа к веб-браузеру, ключ для шифрования, имя для сессионных файлов cookie и настройки для межсайтового скриптинга (XSS). Также рекомендуется создать файл .htaccess, чтобы удалить index.php из пути URL-адресов приложений с помощью RewriteRule. Также необходима конфигурация подключения к базе данных, которую вы вводите в файл database.php.
- Малый след: CodeIgniter оставляет небольшой след в вашей системе. Загружаемый пакет фреймворка занимает около 11 МБ. Из них более 9 МБ приходится на подробную документацию к программе. Минимальный объем кода обусловлен тем, что базовая система CodeIgniter содержит всего несколько небольших библиотек. Дополнительные ресурсы могут быть загружены по мере необходимости.
- Отличная производительность: Бережливая базовая система означает, что CodeIgniter может демонстрировать более высокую скорость по сравнению с другими PHP-фреймворками. Эта система была высоко оценена изобретателем PHP Расмусом Лердорфом, среди прочих. В 2008 году на конференции Free and Open Source Conference (FrOSCon) он заявил, что ему нравится CodeIgniter, «потому что он быстрее, легче и меньше всего похож на фреймворк».
- «Чистые» URL-адреса: CodeIgniter автоматически генерирует удобные для пользователя и подходящие для поисковых машин URL-адреса. Вместо доступа к динамическому веб-контенту через строки запросов, как в других PHP-фреймворках, CodeIgniter использует подход, основанный на сегментах.
URL со строкой запроса: example.com?controller=news&function=article&id=511
URL на основе сегментов: example.com/news/article/511
- Свободный стиль программирования: CodeIgniter основан на свободной интерпретации архитектурной структуры MVC. Для разработчиков не существует установленного стиля программирования.
- Обширная документация: CodeIgniter имеет подробную документацию на английском языке, включая учебник для начинающих, в котором исходный код четко и хорошо прокомментирован. Документация CodeIgniter находится на сайте проекта в виде онлайн-руководства, а также в виде доступной для скачивания версии.
- Поддержка сообщества: Разработчики, создающие свои приложения на базе CodeIgniter, могут поддерживать себя с помощью других пользователей. Проект сопровождается активным сообществом. Публичный форум можно найти на сайте https://forum.codeigniter.com. В настоящее время более 7 300 пользователей участвуют в обмене мнениями по поводу внедрения и дальнейшего развития фреймворка примерно в 65 000 темах.
Недостатки фреймворка CodeIgniter
Поскольку развитие фреймворка CodeIgniter застопорилось перед поглощением BCIT, разработчики искали технологические улучшения, которые были адаптированы сравнимыми фреймворками в последние годы, но не имели успеха с CodeIgniter.
- ORM только через третьих лиц: Object Relational Mapping (или ORM) описывает технику разработки программного обеспечения, которая позволяет приложениям хранить объекты, написанные на объектно-ориентированном языке программирования, таком как PHP, в реляционной базе данных. CodeIgniter не поддерживает ORM, поэтому эта техника может быть интегрирована только через третьих лиц.
- Отсутствие шаблонизатора: CodeIgniter гордится тем, что работает без шаблонизатора. Вместо этого фреймворк предоставляет опциональный простой парсер шаблонов. Это можно рассматривать как преимущество, поскольку использование шаблонизатора обычно сопровождается накладными расходами на производительность (дополнительные расходы во время выполнения). В дополнение к фреймворку необходимо также изучить язык шаблонов. Однако шаблонизатор позволяет отделить генерацию данных от кода для представления, что обычно приводит к четко структурированному исходному коду. Если используется шаблонизатор с тонким синтаксисом, это может значительно сократить общий объем кода приложения.
- Отсутствие пространства имен: С помощью пространства имен PHP позволяет разделить код различных групп приложений. Разработчики PHP используют эту возможность, чтобы избежать конфликтов, которые могут возникнуть при именовании классов и функций. Например, часто возникают коллизии при именовании внутренних классов PHP, функций, констант или элементов, интегрированных третьей стороной. CodeIgniter больше не использует namespacing.
- Отсутствие автозагрузки PHP: Начиная с версии 5, PHP предлагает функции __autoload() и spl_autoload_register(), которые позволяют автоматически загружать необходимые определения классов. Фреймворк CodeIgniter не использует эту функцию.
- Меньшее количество встроенных библиотек по сравнению с другими PHP-фреймворками: Из-за бережливого дизайна программного обеспечения CodeIgniter предлагает значительно меньше библиотек в выходной конфигурации, чем другие PHP-фреймворки. В первую очередь это касается наиболее важных задач веб-разработки, таких как доступ к базе данных, рассылка электронной почты, проверка данных форм, обслуживание сессий или работа с XML-RPC. Для задач, выходящих за рамки базовых возможностей, вам придется интегрировать собственные библиотеки или ресурсы сторонних разработчиков. Этот момент разработчики, которые ищут минимизированный фреймворк, также могут трактовать как преимущество.
CodeIgniter для торопливого читателя
В таблице ниже представлен обзор основной информации о фреймворке CodeIgniter:
CodeIgniter | |
---|---|
Разработчик | Технологический институт Британской Колумбии (BCIT) |
Текущий релиз | Версия 3.1.2 |
Шаблон проектирования | MVC/HMVC, активная запись, цепочка ответственности |
Необходимые знания | PHP, объектно-ориентированное программирование (ООП) |
Язык программирования | PHP 5.6 или выше |
Лицензия | Лицензия MIT |
Поддержка баз данных | MySQL (5.1+), Oracle, PostgreSQL, MS SQL, SQLite, CUBRID, Interbase/Firebird, ODBC |
ORM | Только через третьих лиц |
Кэширование | Да |
Механизм шаблонов | Нет |
Пространства имен | Нет |
Автозагрузка PHP | Нет |
URL-адреса, удобные для поисковых машин | Нет |
Особенности безопасности | Межсайтовая подделка реквизитов (XSRF), межсайтовый скриптинг (XSS), SQL-инъекция |
Библиотека тестирования | PHP Unit |
Заключение: Для каких проектов подходит CodeIgniter?
Благодаря своему компактному дизайну и удобному синтаксису CodeIgniter лучше всего подходит для начинающих программистов. Тот, кто уже имеет некоторый опыт динамической веб-разработки на основе PHP, также быстро освоит этот легкий фреймворк на базе PHP. Опытные программисты также оценят гибкость, которая позволяет им получить базовую функциональность с помощью уменьшенного PHP-фреймворка. Но если вы хотите использовать CodeIgniter, вы должны быть знакомы с архитектурной структурой MVC и уметь обходиться без шаблонизатора, а также родного ORM. Несмотря на минимальный набор кода, CodeIgniter одинаково подходит как для небольших, так и для крупных веб-проектов.