Каркасная разработка веб-приложений на основе фреймворка Kohana::Журнал СА 11.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6188
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6898
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4182
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2986
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3793
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3803
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6296
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3151
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3445
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7261
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10627
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12349
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13979
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9109
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7064
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5373
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4603
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3412
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3142
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3389
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3011
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Каркасная разработка веб-приложений на основе фреймворка Kohana

Архив номеров / 2008 / Выпуск №11 (72) / Каркасная разработка веб-приложений на основе фреймворка Kohana

Рубрика: Веб-технологии /  Разработка

Александр Слесарев

Каркасная разработка веб-приложений
на основе фреймворка Kohana

Кто из веб-разработчиков в начале каждого проекта не сталкивался с рутинными процедурами создания архитектуры приложения, выбора и написания библиотек классов и функций? Кому не приходилось помногу раз переписывать методы для работы с базой данных, файлами, постоянно жалея о том, что время, затраченное на эти задачи, можно было бы использовать в реализации данного проекта? Выход из подобных ситуаций один – использование каркасной среды разработки, позволяющей во много раз повысить производительность разработки.

Преимущества использования фреймворков

В настоящее время существует огромное количество инструментов, значительно облегчающих жизнь веб-разработчикам, одним из которых являются так называемые каркасные среды разработки. К ним относятся всевозможные фреймворки, которые позволяют увеличить производительность создания приложений, значительно уменьшая количество написанного кода, соответственно сокращая время, затраченное на разработку. Так что же это такое – фреймворк? Попросту говоря, это готовый каркас будущих приложений, которые будут создаваться на его основе. Можно писать каждое новое приложение «с нуля», формируя каждый раз его структуру, распределяя модули, директории, библиотеки классов, обрабатывающие основные компоненты приложения, а можно не изобретать велосипед и воспользоваться готовым универсальным решением, которое, собственно, и предоставляет каркасная среда разработки.

Для обеспечения каркаса обычно используется техника объектно-ориентированного программирования (ООП), например, части приложения могут наследоваться от базовых классов каркасной среды. Такой подход в сочетании с паттернами проектирования весьма эффективен, хотя и налагает на разработчика некоторые обязанности, заставляя его следовать соглашениям в написании кода и структуризации приложения. Но, на мой взгляд, это, скорее, можно отнести к преимуществам использования каркасной среды, так как данный подход обучает разработчика дисциплине написания кода.

В этой статье я хотел бы рассказать вам об одном из популярных среди разработчиков PHP-фреймворке – Kohana, разработанном командой Kohana Software Foundation. Он базируется на паттерне MVC (модель-отображение-контроллер) и имеет каскадно-модульную структуру. Он создан на базе не менее популярного и быстрого фреймворка Code Igniter и включает все положительные стороны последнего. Однако в отличие от него в Kohana отсутствует поддержка PHP версии 4 и изменен механизм модульного расширения (на мой взгляд, более удобный). Но главное его достоинство – простота. В отличие, например, от такого мощного фреймворка, как Zend Framework, для работы с которым не обойтись поверхностными знаниями в PHP-программировании, а именно в ООП, Kohana доступна, на мой взгляд, даже начинающим PHP-программистам, знакомым только с основами объектно-ориентированного программирования.

Архитектура приложения

Очень часто при разработке небольших и средних проектов использование мощных средств напоминает стрельбу из пушки по воробьям, когда можно значительно упростить задачу. В этом случае может помочь использование именно такого фреймворка, как Kohana, предоставляющего разработчику удобный, гибкий интерфейс и богатый инструментарий. Как уже говорилось выше, архитектура приложения базируется на паттерне MVC, прекрасно зарекомендовавшем себя в разработке и позволяющем максимально инкапсулировать задачи, выполняемые различными блоками системы. Файловая структура Kohana представлена на рис. 1.

Рисунок 1. Файловая структура фреймворка

Рисунок 1. Файловая структура фреймворка

Рассмотрим более подробно содержимое структуры фреймворка. В корне располагаются директории application, modules и system. В директории application находится каркас будущего приложения. При разработке в ней происходит основная работа программиста. Директория modules предназначена для дополнительных модулей, расширяющих функциональность приложения. Директория system – системная директория Kohana.

Теперь рассмотрим подробнее «сердце» нашего приложения, а именно директории controllers, models и views, расположенные в директории application. Именно в них мы проведем большую часть работы над приложением. Как видно из названий, в директории controllers располагаются контроллеры приложения, в директории models – модели и, соответственно, в директории views – отображения. Взаимодействие между этими компонентами осуществляется, как показано на рис. 2.

Рисунок 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. Схема прохождения запроса

Рисунок 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

Рисунок 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.

 Еще одним способом внесения изменений в функциональность ядра является использование библиотек. Автоматически загружаются системой и доступны в любом месте следующие библиотеки:

  • URI;
  • Input.

Остальные библиотеки могут быть загружены по мере необходимости. Для этого достаточно инициализировать новый объект класса библиотеки:

$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.

  1. http://kohanaphp.com – официальный сайт разработчиков фреймворка Kohana.
  2. http://kohanaphp.com/license – лицензионное соглашение.
  3. http://docs.kohanaphp.com – техническая документация.
  4. http://kohanaphp.com/download – дистрибутив фреймворка.
  5. http://code-igniter.ru – PHP-фреймворк CodeIgniter.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru