Александр Слесарев
Каркасная разработка веб-приложений
на основе фреймворка Kohana
Кто из веб-разработчиков в начале каждого проекта не сталкивался с рутинными процедурами создания архитектуры приложения, выбора и написания библиотек классов и функций? Кому не приходилось помногу раз переписывать методы для работы с базой данных, файлами, постоянно жалея о том, что время, затраченное на эти задачи, можно было бы использовать в реализации данного проекта? Выход из подобных ситуаций один – использование каркасной среды разработки, позволяющей во много раз повысить производительность разработки.
Преимущества использования фреймворков
В настоящее время существует огромное количество инструментов, значительно облегчающих жизнь веб-разработчикам, одним из которых являются так называемые каркасные среды разработки. К ним относятся всевозможные фреймворки, которые позволяют увеличить производительность создания приложений, значительно уменьшая количество написанного кода, соответственно сокращая время, затраченное на разработку. Так что же это такое – фреймворк? Попросту говоря, это готовый каркас будущих приложений, которые будут создаваться на его основе. Можно писать каждое новое приложение «с нуля», формируя каждый раз его структуру, распределяя модули, директории, библиотеки классов, обрабатывающие основные компоненты приложения, а можно не изобретать велосипед и воспользоваться готовым универсальным решением, которое, собственно, и предоставляет каркасная среда разработки.
Для обеспечения каркаса обычно используется техника объектно-ориентированного программирования (ООП), например, части приложения могут наследоваться от базовых классов каркасной среды. Такой подход в сочетании с паттернами проектирования весьма эффективен, хотя и налагает на разработчика некоторые обязанности, заставляя его следовать соглашениям в написании кода и структуризации приложения. Но, на мой взгляд, это, скорее, можно отнести к преимуществам использования каркасной среды, так как данный подход обучает разработчика дисциплине написания кода.
В этой статье я хотел бы рассказать вам об одном из популярных среди разработчиков PHP-фреймворке – Kohana, разработанном командой Kohana Software Foundation. Он базируется на паттерне MVC (модель-отображение-контроллер) и имеет каскадно-модульную структуру. Он создан на базе не менее популярного и быстрого фреймворка Code Igniter и включает все положительные стороны последнего. Однако в отличие от него в Kohana отсутствует поддержка PHP версии 4 и изменен механизм модульного расширения (на мой взгляд, более удобный). Но главное его достоинство – простота. В отличие, например, от такого мощного фреймворка, как Zend Framework, для работы с которым не обойтись поверхностными знаниями в PHP-программировании, а именно в ООП, Kohana доступна, на мой взгляд, даже начинающим PHP-программистам, знакомым только с основами объектно-ориентированного программирования.
Архитектура приложения
Очень часто при разработке небольших и средних проектов использование мощных средств напоминает стрельбу из пушки по воробьям, когда можно значительно упростить задачу. В этом случае может помочь использование именно такого фреймворка, как Kohana, предоставляющего разработчику удобный, гибкий интерфейс и богатый инструментарий. Как уже говорилось выше, архитектура приложения базируется на паттерне MVC, прекрасно зарекомендовавшем себя в разработке и позволяющем максимально инкапсулировать задачи, выполняемые различными блоками системы. Файловая структура Kohana представлена на рис. 1.
Рисунок 1. Файловая структура фреймворка
Рассмотрим более подробно содержимое структуры фреймворка. В корне располагаются директории application, modules и system. В директории application находится каркас будущего приложения. При разработке в ней происходит основная работа программиста. Директория modules предназначена для дополнительных модулей, расширяющих функциональность приложения. Директория system – системная директория Kohana.
Теперь рассмотрим подробнее «сердце» нашего приложения, а именно директории controllers, models и views, расположенные в директории application. Именно в них мы проведем большую часть работы над приложением. Как видно из названий, в директории controllers располагаются контроллеры приложения, в директории models – модели и, соответственно, в директории views – отображения. Взаимодействие между этими компонентами осуществляется, как показано на рис. 2.
Рисунок 2. Взаимодействие частей фреймворка
Контроллер – это управляющий элемент приложения, который получает информацию из внешнего запроса и реагирует на нее, заставляя модель предоставить ему необходимые данные, которые в свою очередь он отправляет отображению. Все контроллеры в Kohana – классы, которые наследуются от базового класса Controller. Следует отметить, что имя файла контроллера должно совпадать с именем его класса, причем имя файла должно состоять только из строчных букв и иметь расширение .php, а имя класса начинаться с прописной буквы. Например, если у нас есть файл контроллера welcome.php, значит, класс, который он содержит, будет называться Welcome_Controller.
Модель получает и обрабатывает данные, например, из БД, реагирует на запросы контроллера и предоставляет ему обработанную информацию для отображения. Аналогично механизму наследования в контроллерах модели также наследуются от базового класса Model и имеют те же правила именования файлов. Например, если файл модели называется user.php, то, соответственно, класс, содержащийся в этом файле, будет называться User_Model.
Отображение осуществляет вывод информации, полученной от контроллера, пользователю. По сути, отображение – это HTML-шаблон приложения, реализующий пользовательский интерфейс. По правилам Kohana файлы отображений должны иметь расширение .php и именоваться строчными буквами.
Вызов контроллера осуществляется GET-запросом. Это должен быть URL-адрес, состоящий из сегментов, разделенных слэшами. По умолчанию адреса в Kohana являются дружественными для поисковых систем и понятны для человека. Подход данного фреймворка, основанный на сегментах URL, выглядит следующим образом:
www.domain.ru/index.php?/controller/method/params
Как видно из приведенного примера, после index.php идут следующие сегменты:
- controller – имя вызываемого контроллера;
- method – имя метода контроллера;
- params – параметры, передаваемые в контроллер.
В данном случае будет вызван контроллер controller.php, расположенный в директории application/controllers. Затем будет вызван метод method из этого контроллера, в который передадутся параметры, указанные в сегменте params. Как видно, все очень просто. Однако есть один недостаток. Дело в том, что по умолчанию имя файла index.php всегда будет отображаться в строке URL, согласитесь, что это не совсем красиво. К счастью, эта проблема в Kohana легко решается простым правилом в файле .htaccess:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
В приведенном выше примере любой запрос HTTP, помимо запросов к index.php, изображениям и robots.txt, трактуется как запрос для нашего файла index.php. Теперь наш запрос будет иметь следующий вид:
www.domain.ru/controller/method/params
Такой подход к созданию URL оправдан с точки зрения безопасности, так как обращение осуществляется не к реальному файлу, указанному в запросе, а формируется внутренними методами системы. Любой запрос, отличающийся от данной схемы, вызовет ошибку. Это повышает «иммунитет» приложения к некоторым видам уязвимостей, например, таких, как XSS (межсайтовый скриптинг).
Также необходимо отметить, что в каждом файле фреймворка вставлена строка:
defined('SYSPATH') or die('No direct script access.');
Она запрещает прямой доступ к файлу GET-запросом, поэтому попытка обратиться через строку браузера к любому файлу не приведет к успеху.
Следует также сказать, что вы можете изменить свой URL, добавив к нему произвольный суффикс, например, html. Для этого в конфигурационном файле application/config/config.php добавить его значение в параметр $config['url_suffix'] = ‘html’ (по умолчанию суффикс отсутствует). В этом случае URL может иметь такой вид:
www.domain.ru/controller/method/params.html
Пример каркасной разработки
Теперь пришло время перейти от теории к практике. Давайте соберем все воедино и попробуем создать простое приложение на основе Kohana. Для этого нам потребуется дистрибутив фреймворка.
Следует отметить, что Kohana – свободно распространяемый программный продукт, основывающийся на лицензии BSD, поэтому для его использования достаточно скачать дистрибутив на официальном сайте разработчика http://kohanaphp.com/download.
Надо сказать, что Kohana запускается с минимально возможными требованиями к серверу, однако следует учесть необходимые:
- поддержка Unicode;
- интерпретатор PHP версии не ниже 5.2.0;
- наличие сервера баз данных.
Следует отметить, что Kohana непритязательна к HTTP серверу и прекрасно работает на Apache 1.3+, Apache 2.0+, lighttpd и MS IIS. Что касается сервера БД, то в Kohana используются драйверы для работы со следующими СУБД:
- MySQL;
- MySQLi;
- PostgreSQL;
- PDOSqlite.
Интерфейс для работы с БД, который предоставляет фреймворк разработчику, имеет высокий уровень абстракции, поэтому для выбора и подключения соответствующего драйвера нужно лишь выполнить соответствующие настройки в файле system/config/database.php:
<?php defined('SYSPATH') or die('No direct script access.'); $config['default'] = array( 'benchmark' => TRUE, 'persistent' => FALSE, 'connection' => array ( 'type' => 'mysql', //Тип БД 'user' => 'root', //Имя пользователя БД 'pass' => 'pass', //Пароль БД 'host' => 'localhost', //Хост БД 'port' => FALSE, 'socket' => FALSE, 'database' => 'kohana' //Имя БД ), 'character_set' => 'utf8', 'table_prefix' => '', 'object' => TRUE, 'cache' => FALSE, 'escape' => TRUE);
Для корректной работы приложения следует обратить внимание на настройки PHP интерпретатора, а именно на подключенные расширения. К необходимым из них относятся следующие:
- PCRE – функции для работы с регулярными выражениями (Perl-совместимые);
- iconv – интерфейс к библиотеке преобразования кодировок iconv;
- mcrypt – требуется для шифрования;
- SPL – требуется для некоторых библиотек ядра.
Для ускорения функций фреймворка, работающих со строками UTF-8, рекомендуется подключить расширение mbstring. Однако нужно заметить, что это расширение может перегружать встроенные функции PHP для работы со строками.
Теперь можно приступить, собственно, к инсталляции фреймворка, которая сводится к загрузке дистрибутива в директорию DOCUMENT_ROOT сервера и установке основных конфигурационных настроек. К ним относятся настройка файла system/config/database.php, как говорилось выше, и установка некоторых параметров конфигурационного файла application/config/config.php:
$config['site_domain'] = '/kohana/'; //Имя домена$config['index_page'] = 'index.php'; //Индексный контроллер
Установите значение параметра ‘site_domain’, значению доменного имени сервера, а $config[‘index_page’] = ‘index.php’. Этот параметр указывает на то, какой контроллер будет вызван по умолчанию, без явного указания в URL. Обратите внимание на то, что в значении данного параметра обязательно указывать расширение файла. Остальные настройки можно пока оставить без изменений. Далее нужно создать в корне сервера файл .htaccess (для удаления сегмента index.php), как рассказывалось выше.
Теперь можно приступить к созданию самого приложения. Первым шагом в этой процедуре будет создание контроллера. Создайте файл index.php в директории application/ controllers и впишите в него следующее:
<?php defined('SYSPATH') or die('No direct script access.'); class Index_Controller extends Controller { //Конструктор public function __construct() { parent::__construct(); } //Метод, вызываемый по умолчанию public function index() { echo "Hello, World!"; }}?>
Теперь наберите в адресной строке браузера http://kohana (доменное имя вашего сервера, указанное в конфигурационном файле), и вы увидите результат работы контроллера. Как видите, все довольно просто. Однако в нашем случае вывод в окно браузера происходит непосредственно из контроллера, что не соответствует идеологии MVC. Чтобы отделить логику от представления, нам необходимо создать файл отображения index.php в директории application/view:
<html>
<head>
<title><?=$title;?></title>
</head>
<body>
<p>
<?=$content;?>
</p>
</body>
</html>
И переписать метод index() нашего контроллера index.php:
//Метод, вызываемый по умолчанию
public function index()
{
$view = new View('index'); //Создание нового объекта отображения
$view->title = "Фреймворк Kohana "; //Передача параметров в отображение
$view->content = "Приложение, созданное на базе Kohana ";
$view->render(TRUE); //Вывод отображения в браузер
}
Результатом работы нашего приложения будет строка «Приложение, созданное на базе Kohana». Однако и это еще не все. В данном случае механизм MVC используется не полностью. Мы определили переменные title и content в контроллере, а должны были получить данные из модели. Для чистоты эксперимента давайте создадим файл модели index.php в директории application/models:
<?php defined('SYSPATH') or die('No direct script access.'); class Index_Model extends Model { public function GetData() { $data['title'] = "Фреймворк Kohana"; $data['content'] = "Приложение, созданное на базе Kohana"; return $data; }}?>
Далее следует несколько изменить наш контроллер:
<?php defined('SYSPATH') or die('No direct script access.');
class Index_Controller extends Controller {
//Конструктор
public function __construct()
{
parent::__construct();
// Инициализация объекта модели.
// Теперь он доступен во всех методах контроллера
$this->model = new Index_Model;
}
// Метод, вызываемый по умолчанию
public function index()
{
$data = $this->model->GetData(); // Получение данных из модели
$view = new View('index',$data); // Создание нового объекта отображения и передача параметров
$view->render(TRUE); // Вывод отображения в браузер
}
}
?>
Теперь наше приложение отвечает всем требованиям паттерна MVC. Это всего лишь упрощенный пример, но он наглядно иллюстрирует принцип работы фреймворка. По аналогичной схеме происходит и расширение функциональности при помощи модулей, поэтому нет необходимости заострять на этом внимание. Следует лишь отметить, что каркас каждого модуля должен располагаться в директории modules/имя_модуля, а в файле application/config/config.php, в параметре $config['modules'] необходимо указать путь к директории этого модуля.
Архитектура ядра
Давайте теперь подробнее рассмотрим схему прохождения запроса и ответа в работающем приложении на основе Kohana (см. рис. 3). Как уже говорилось выше, вся система построена на каскадно-модульном принципе. Каскадность заключается в следующем: система загружает контроллеры из директории application, если там они не найдены, то из modules (требуется изменение конфигурации), в том же случае, если и там они не найдены, управление передается директории system, где в конечном счете может быть вызван контроллер ошибок, например, для генерации 404 ошибки. В идеальном случае контроллеры из директории system не должны вызываться. Если это произошло, значит, в вашем приложении что-то пошло «наперекосяк».
Рисунок 3. Схема прохождения запроса
Все запросы к приложению адресуются файлу index.php, расположенному в директории DOCUMENT_ROOT. Он выступает в роли фронт-контроллера и инициализирует подключение остальных частей кода системы. Роутер анализирует HTTP-запрос, чтобы определить, что делать с этим адресом. Если существует кэш этой страницы, то он напрямую выдается в браузер, минуя логику приложения. Перед загрузкой контроллера приложения HTTP-запрос и любая информация, отправленная пользователем, фильтруется на предмет безопасности. Далее запрос передается контроллеру приложения, который загружает модель, ядро библиотек, хелперы и прочие ресурсы, необходимые для его выполнения. После этого подключается отображение, и данные отдаются в браузер. Если включено кэширование, то отображение записывается на диск, чтобы в следующий раз быть считанным с него.
Фронт-контроллер загружает и инициализирует базовые классы ядра, вспомогательные библиотеки, хелперы и другие ресурсы, необходимые для работы приложения.
К основным классам ядра, которые загружаются по умолчанию и доступны в процессе работы программы, относятся следующие:
- Kohana;
- Benchmark;
- Event;
- Unicode;
- View.
Kohana Class
Основной класс ядра фреймворка. Он загружает роутер и пересылает данные контроллеру приложения. Он инициализируется вместе с загрузкой приложения, поэтому нет необходимости определять его в коде. Он доступен в виде статических методов, для обращения нужно вызвать нужный метод следующим образом:
Kohana::config('session.driver');
В данном примере вызван метод config, который возвращает значение параметра driver из конфигурационного файла session.php.
Benchmark Class
Этот класс позволяет измерить время выполнения кода программы. Так же, как и Kohana Class, он инициализируется в процессе загрузки и предоставляет для доступа свои статические методы. По умолчанию метки выполнения установлены на следующие процессы:
- Kohana Loading – загрузка ядра;
- Environment Setup – загрузка вспомогательных библиотек;
- System Initialization – инициализация системных классов;
- Controller Setup – загрузка контроллера;
- Controller Execution – время выполнения кода контроллера;
- Total Execution – общее время выполнения.
Результаты работы данного класса можно вывести с помощью библиотеки Profiler. В этом случае будет выведена детальная статистика времени выполнения и объема памяти занимаемого вышеперечисленными процессами. Достаточно объявить в конструкторе контроллера объект класса Profiler:
new Profiler;
В этом случае внизу страницы будет выведена статистика времени генерации страницы и объема занимаемой памяти (см. рис. 4).
Рисунок 4. Пример работы класса Benchmark
Разумеется, можно ставить в коде приложения и собственные метки. Это достаточно просто сделать, воспользовавшись методами, предоставляемыми классом Benchmark:
// Начало измерения
Benchmark::start('benchmark1');
...
// Код программы
...
// Остановка измерения
Benchmark::stop('benchmark1');
...
// Вывод значения
print_r(Benchmark::get('benchmark1'));
В данном примере метод get возвратит ассоциативный массив, состоящий из двух элементов: time и memory, которые содержат время выполнения кода в секундах и объем, занимаемый в памяти в байтах соответственно. Причем будет измерено время выполнения кода, находящегося между методами start и stop.
Event Class
Класс для управления событиями. Следует отметить, что Kohana сохраняет события в очередях, в отличие от стеков. Это означает, что каждое новое событие будет обработано после существующего. События в Kohana обозначаются уникальным именем, причем имя состоит из префикса и собственно имени. Это делает их еще более уникальными. Все предопределенные события ядра имеют префикс system. По умолчанию в ядре фреймворка определены несколько системных событий:
- system.ready – это самое раннее событие. Оно выполняется при старте системы, немедленно после загрузки хуков. Хуки загружаются непосредственно перед этим событием.
- system.routing – обрабатывает URL и маршрутизацию. По умолчанию вызывается: Router::find_uri и Router::setup.
- system.execute – контроллер, определяющий местонахождение и инициализацию. Объект создается как экземпляр класса Kohana. По умолчанию вызывается: Kohana::instance.
- system.post_routing – вызывается после того, как вся маршрутизация выполнена. Вмешательства в маршрутизацию могут быть сделаны в этом событии. Если Router::$controller пуст после этого события, будет вызвана ошибка 404.
- system.404 – вызывается, когда страница не может быть найдена. По умолчанию вызывается так: Kohana::show_404.
- system.pre_controller – вызывается в пределах system.execute, после того, как файл контроллера загружен, но прежде, чем создан его объект.
- system.post_controller_constructor – вызывается в пределах system.execute после того, как вызван конструктор контроллера, но до вызова каких-либо методов внутри него.
- system.post_controller – вызывается в пределах system.execute, после полного выполнения контроллера.
- system.send_headers – вызывается непосредственно перед тем, как глобальный буфер вывода закрыт, но прежде, чем любой контент отображен. После этого события запись в куки уже не возможна и данные сессии не будут сохранены.
- system.display – вызывается в финальном выводе. В этот момент заголовки уже отправлены пользователю и отображения загружены.
- system.shutdown – последнее событие, которое происходит непосредственно перед тем, как PHP начинает закрываться. По умолчанию вызывается так Kohana::shutdown.
Все методы класса Event – статические, поэтому нет необходимости инициализировать объект, реализация метода происходит в момент его вызова.
После того, как выполнены все возвратные вызовы класса, память немедленно освобождается, поэтому данные могут быть использованы только во время выполнения возвратного вызова.
Unicode
Предоставляет класс utf8 для работы со строками UTF-8, так как методы PHP не слишком нативны для выполнения этих задач. Для этих целей предоставляются статические методы класса. Например:
utf8::strip_ascii_ctrl($str)
В данном примере из строки $str будут удалены все управляющие ASCII-символы.
View Class
Класс для работы с отображениями. Главная цель отображений, а в том числе и класса – хранение прикладной логики приложения отдельно от кода представления. Обычно код представления в Kohana – это HTML, который отвечает за непосредственный вывод интерфейса пользователю. В него могут быть включены файлы CSS, JavaScript, поэтому в нем можно использовать AJAX и другие технологии. Файлы отображений имеют расширение .php, поэтому в них можно включать PHP-код, например, для организации циклов.
Как уже было показано в примере выше, создание нового отображения осуществляется с помощью объекта класса View:
$view = new View('yourview'); // Создание нового объекта отображения
$view->title = "Hello world!"; // Передача параметра в отображение
$view->render(TRUE); // Вывод отображения в браузер
Как видно из примера, мы создали новое отображение yourview.php (обратите внимание на то, что в параметре объекта View расширение не указывается), передали в него переменную title и вывели его в браузер.
Еще один момент, на который следует обратить внимание в данном фреймворке, – это хуки, или обработчики прерываний, о которых уже упоминалось выше. С помощью хуков можно изменять ход работы системы, не затрагивая ядро фреймворка. По сути, это файлы, включенные в старт системы. К ним относятся:
- index.php;
- core/Bootstrap.php;
- core/Benchmark.php;
- core/utf8.php;
- core/Event.php;
- core/Kohana.php.
Методы хуков могут использоваться, когда эти файлы загружены. Это происходит до первого системного события, а именно system.ready, поэтому прерывания можно использовать в любом событии. Система хуков может быть включена или выключена глобально (по умолчанию она отключена). В файле application/config/config.php нужно найти строку:
$config['enable_hooks'] = FALSE;
И установить ее значение TRUE. Файлы хуков необходимо располагать в директории application/hooks. Каждый файл должен именоваться строчными буквами и содержать класс, причем его имя должно совпадать с именем файла, начальная буква которого прописная. Простой пример. Создадим файл power.php, расположенный в директории application/hooks:
<?php defined('SYSPATH') or die('No direct script access.');
class Power {
public function Kohana(){
Event::$data = Event::$data.'<!-- Powered by Kohana-->';
}
}
Event::add('system.display', array('Power', 'Kohana'));
В приведенном примере к событию 'system.display' в каждой сгенерированной странице будет добавляться комментарий <!-- Powered by Kohana-->.
Следует также отметить, что после загрузки хуков доступны следующие системные константы, которые можно использовать при обработке прерываний:
- EXT – содержит расширение файлов фреймворка, по умолчанию .php;
- KOHANA – базовое имя файла;
- DOCROOT – корневая директория приложения (DOCUMENT_ROOT);
- APPPATH – путь к директории application;
- SYSPATH – путь к директории system;
- MODPATH – путь к директории modules.
Еще одним способом внесения изменений в функциональность ядра является использование библиотек. Автоматически загружаются системой и доступны в любом месте следующие библиотеки:
Остальные библиотеки могут быть загружены по мере необходимости. Для этого достаточно инициализировать новый объект класса библиотеки:
$this->profiler = new Profiler;
В приведенном выше примере методы библиотеки Profiler будут доступны в объекте profiler. При необходимости, для изменения функциональности, можно легко расширять и переопределять существующие библиотеки Kohana и создавать собственные. Располагать библиотеки следует в директории application/libraries. Требования к файлам при создании новой библиотеки следующие:
- первая буква имени файла прописная, остальные строчные;
- имя класса должно совпадать с именем файла и иметь суффикс _Core.
Например, файл библиотеки application/libraries/Book.php должен содержать класс Book_Core:
<?php defined('SYSPATH') or die('No direct script access.');
class Book_Core {
//Код библиотеки Book
}
?>
Для расширения существующих библиотек фреймворка требования следующие:
- имя файла должно совпадать с именем расширяемого файла и иметь префикс MY_;
- класс библиотеки наследуется от расширяемого класса и имеет такое же имя, но без суффикса _Core.
Например, чтобы расширить класс библиотеки Controller, необходимо создать файл application/libraries/MY_Controller.php:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller extends Controller_Core {
public function __construct()
{
parent::__construct();
}
}
?>
Обратите внимание на то, что в классе обязательно должен присутствовать метод конструктора со ссылкой на родительский конструктор.
Существует еще один способ изменения функциональности ядра с помощью библиотек – переопределение существующего класса. Для этого нужно всего лишь создать класс и содержащий его файл, имена которых идентичны существующей библиотеке, и поместить его в директорию application/libraries. Вот простой пример, иллюстрирующий переопределение существующей библиотеки Profiler.
Файл application/libraries/Profiler.php:
<?php defined('SYSPATH') or die('No direct script access.'); class Profiler_Core { //Код новой библиотеки Profiler} ?>
Еще одним приятным моментом для разработчика является использование так называемых хелперов – вспомогательных функций. Наряду с библиотеками Kohana предоставляет богатый набор этих функций, но в отличие от библиотек, для доступа к методам которых нужно было инициализировать объект, все методы хелперов являются статическими и доступны в момент обращения к ним. Так же, как и библиотеки, хелперы автоматически загружаются системой, и потому нет необходимости беспокоиться об их загрузке.
Для доступа к методу любого хелпера достаточно обратиться к нему в нужном месте кода:
$url = url::base();
Механизм добавления, расширения и переопределения классов хелперов полностью аналогичен такому же механизму у библиотек. Это же относится и к соглашениям в отношении именования файлов и классов хелперов. Следует лишь отметить, что нужно помнить о том, что все методы хелперов статические и должны объявляться ключевым словом static.
Вместо заключения
Разумеется, в рамках данной статьи невозможно описать весь инструментарий, который Kohana предоставляет разработчику. Цель статьи лишь познакомить вас с основными принципами работы фреймворка и дать понять, насколько может быть оправданно и полезно применение каркасной среды разработки, а именно Kohana. При создании реальных проектов вы можете легко воспользоваться огромным набором методов и инструментов, которые предоставляет фреймворк, и понять, насколько это просто, удобно. Подробное описание можно найти в документации на официальном сайте разработчика [3]. Я надеюсь, что вы не напрасно потратите время, посвятив его изучению Kohana.
- http://kohanaphp.com – официальный сайт разработчиков фреймворка Kohana.
- http://kohanaphp.com/license – лицензионное соглашение.
- http://docs.kohanaphp.com – техническая документация.
- http://kohanaphp.com/download – дистрибутив фреймворка.
- http://code-igniter.ru – PHP-фреймворк CodeIgniter.