CodeIgniter — упрощаем разработку веб-решений. Часть 1
обзор веб-фреймворка для PHP-разработчиков
Знакомство
Сам инструмент позиционируется как небольшое средство для разработчиков, которые живут в мире дедлайнов, и тех, кому надоели громоздкие недокументированные фреймворки. Судя по списку сайтов, построенных с использованием CodeIgniter, многие уже прислушались к данному анонсу и воспользовались детищем компании EllisLab. Что из себя представляет этот «помощник» программиста? Это комплекс библиотек для разработки веб-приложений, покрывающих различные области программирования на языке PHP, начиная от примитивной текстовой обработки до работы с XML, базами данных и безопасностью приложений. При всем этом познания в области PHP определяют степень сложности конечного продукта, но уровень владения языком программирования может быть и невысоким.
CodeIgniter бесплатный, open source-проект. Распространяется по лицензии типа Apache/BSD. Коммерческое использование разработанных с его помощью продуктов допускается в полной мере. Однако в документации к ПО должно быть обязательное упоминание о фреймворке. Также разрешено изменение внутреннего кода с непременным указанием о внесенных поправках.
Основой работы CodeIgniter является использование подхода Model-View-Controller(«Модель — представление — контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты. Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента. Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя свое состояние. Представление (View) отвечает за отображение информации (пользовательский интерфейс). Поведение (Controller) интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Кроме того, фреймворк отличают небольшой размер, расширяемость за счет возможности подключения дополнительных библиотек и плагинов, а также поддержка сообщества пользователей.
Среди черт продукта изготовитель заявляет:
- простоту использования;
- большие возможности;
- совместимость с различными конфигурациями хостингов;
- низкие требования;
- не требует знаний в работе к командной строкой;
- отсутствие привязки к каким-либо правилам кодирования;
- обширную документацию.
Принцип работы фреймворка можно описать несколькими этапами:
- веб-страница index.php, являясь контроллером, определяет действия пользователя, а следовательно, передает сигналы управления на модель;
- элемент Routing обрабатывает http-запрос и «решает», что с ним делать;
- при существовании информации в кеше данные отправляются обратно пользователю, в противном случае подаются дальше на модель;
- компонент Security обрабатывает данные с точки зрения безопасности;
- сигнал с контроллера активирует модель, библиотеки, плагины, помощники и скрипты. Выполняется определенный процесс обработки поступившей информации, и выходные данные поступают на элемент представления;
- информация преобразовывается в вид, как она должна выглядеть для пользователя.
Установка
Инсталляция пакета не должна вызвать трудностей. Последняя версия фреймворка скачивается с сайта в виде архива — он должен быть распакован на сервер. Далее в конфигурационном файле application/config/config.php настраивается путь к разрабатываемому приложению, а в настройках баз данных в файле application/config/database.php устанавливаются параметры подключения к оным. Это все манипуляции.
«Человекопонятный URL»
В CodeIgniter есть возможность построения ЧПУ — понятного для человека представления URL. Например, example.com/news/article/my_article. В данном случае каждый сегмент адреса имеет свое значение: news — класс, к которому идет обращение; далее article — функция или метод вызываемого класса; последний (или их может быть несколько) — параметры, передаваемые в функцию.
Контроллеры
Контроллер в рамках фреймворка — это файл класса, который имеет такое имя, по которому к нему можно обратиться по адресу example.com/controller_name/. В контроллере прописываются все его методы, которые могут быть использованы. По умолчанию при обращении к URL, описанному выше, вызывается функция index(). Однако можно прописать множество других, вызов которых возможен при переходе по адресу example.com/controller_name/function_name/. Множество параметров описывается далее — example.com/controller_name/par1/par2/.
Например, для того чтобы при обращении к example.com/blog/ мы обнаружили надпись Hello World!, а при выполнении функции comments(), то есть обращении к example.com/blog/comments/, обнаружили Look at this!, пишем такой код
Как видно, все довольно просто. Если развивать далее, то можно говорить о том, что из этих участков могут быть вызваны представления, библиотеки, плагины, помощники — о них ниже.
Представления
Элемент View подхода MVC в CodeIgniter — это обычная веб-страница или ее часть (шапка, подвал и тому подобное). При этом использование представлений может быть иерархично — один объект может содержать в себе множество подобных. Представление никогда не вызывается напрямую, оно лишь подгружается контроллером. Наряду с html-разметкой в представлении можно использовать PHP-вставки, что расширяет возможности. А особенно это важно с учетом того, что в представление можно передавать информацию из контроллера. Это может быть как одиночная переменная, так и массив данных.
Модели
Модели — классы, содержащие функции обработки информации. Исходя из модели MVC, можно судить о том, что эти данные поступают в модель с контроллера. Обычно входной информацией являются данные из БД. Модели также не могут быть вызваны напрямую, а подгружаются из контроллеров. Однако это не самый рациональный метод работы с моделями. Их загрузку можно сделать автоматической, особенно это касается тех объектов, которые используются часто и глобально. Автозагрузка настраивается элементарно — в специальном файле установок application/config/autoload.php выставляется список конкретных моделей, с которыми впоследствии нужно работать. Подключение модели к БД осуществляется передачей параметров соединения в функцию загрузки.
Helpers и Plugins
Помощники, как видно из названия, призваны помочь исполнить какую-либо незначительную функцию. Например, есть помощники построения веб-форм, загрузки файлов или работы с cookies. В отличие от всех остальных основных элементов фреймворка помощники — наборы достаточно элементарных функций. Они написаны даже без использования объектно ориентированного подхода. Каждая функция выполняет небольшую, строго ограниченную задачу. Однако набор довольно велик, и такая «мелочь» становится очень полезной в работе.
Плагины — почти то же самое, что и помощники, за исключением главного отличия: они не являются набором функций, они и есть одна функция. Кроме этого, можно обратить внимание на то, что помощники — больше часть ядра системы, в то время как плагины — нечто внешнее, разрабатываемое сторонними программистами. В реальности это так и оказывается. Даже те плагины, которые поставляются в основном комплекте, написаны пользователями CodeIgniter, входящими в сообщество.
Дополнительные особенности
Прежде всего тут нужно сказать о поддержке библиотек — наборе различных функций, требуемых для реализации какой-то определенной цели. По умолчанию в CodeIgniter уже добавлены библиотеки, например, для работы с электронной почтой, xml, шифрованием. Но есть возможность подключения пользовательских классов.
Программисты, готовые «внедриться» в код ядра, могут воспользоваться так называемыми хуками (Hook) — код, влияющий на исполнение основной программы без ее изменения. Например, если разработчик хочет, чтобы его скрипт выполнился до загрузки какого-либо контроллера или сразу же после. Для настройки хука есть несколько возможных вариантов точек срабатывания:
- pre_system — самое начало срабатывания системы;
- pre_controller — перед вызовом контроллера;
- post_controller_constructor — после инициализации контроллера;
- post_controller — после полного срабатывания контроллера;
- display_override — перед пересылкой результирующей веб-страницы браузеру;
- cache_override — позволяет использовать собственную функцию работы с кешем;
- post_system — при завершении работы системы.
Поддержка пользователей
Отдельной похвалы заслуживает поддержка разработчиков, пользующихся CodeIgniter. Во-первых, полная документация по всем библиотекам, помощникам в принципе по возможностям системы. Кроме доступа к онлайн-версии на сайте фреймфорка в комплект поставки входит еще и офлайн-вариант руководства. Пользоваться им очень удобно — есть поиск (с помощью Google, таким образом, для офлайн-версии должно быть активное соединение с Интернетом), указатель, рубрикатор. Таким образом, у разработчика документация всегда под рукой. Во-вторых, есть сообщество программистов по CodeIgniter во главе с членами команды EllisLab, готовых прийти на помощь по реализации какой-либо проблемы. Единственная проблема — отсутствие поддержки на русском языке.