суббота, 25 сентября 2010 г.

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

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

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


Сегодня слово фреймворк – одно из самых популярных у программистов. Для веб-разработки создана масса различных каркасных сред для JavaScript, PHP, Python и др. Определить значение его проще всего как набор инструментов, библиотек, соглашений, предназначенный для вынесения повторяющихся операций в отдельные модули, которые можно использовать многократно. Главная цель – позволить разработчику сосредоточится на решении уникальных для каждого проекта задач, оставив все рутинные операции фреймворку. Проанализировав свою работу, вы наверняка замечали, что есть вещи, которые приходится повторять многократно в каждом проекте. Его цель – объединить эти действия в отдельную структуру, следуя принципу «не повторяй себя». Это может значительно сократить время разработки приложения и, соответственно, снизить стоимость конечного продукта.

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

В этой статье я хотел бы поговорить об одном из популярных среди разработчиков 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.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:
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 и впишите в него следующее:

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:

     

$content;?>

И переписать метод 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:

defined('SYSPATH') or die('No direct script access.');

class Index_Model extends Model {

      public function GetData()
      {
            $data['title'] = "Фреймворк Kohana";
            $data['content'] = "Приложение, созданное на базе Kohana";
            return $data;
      }
}
?>

Далее следует несколько изменить наш контроллер:

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'] необходимо указать путь к директории этого модуля.

Архитектура ядра.
Давайте теперь подробнее рассмотрим схему (Рис. 3) прохождения запроса и ответа в работающем приложении на основе Kohana.


Рис. 3. Схема прохождения запроса


Как уже говорилось выше, вся система построена на каскадно-модульном принципе.  Каскадность заключается в следующем: система загружает контроллеры из директории application, если там они не найдены, то из modules (требуется изменения конфигурации), в том же случае, если и там они не найдены, управление передается директории system, где в конечном счете может быть вызван контроллер ошибок, например, для генерации 404 ошибки. В идеальном случае контроллеры из директории system вообще не должны вызываться. Если это произошло, значит в вашем приложении, что-то пошло «наперекосяк».


Все запросы к приложению адресуются файлу 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. Пример работы класса 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:

defined('SYSPATH') or die('No direct script access.');
 
class Power {
 public function Kohana(){
   Event::$data = Event::$data.'';
 }
}
Event::add('system.display', array('Power', 'Kohana'));

В приведенном примере, к событию 'system.display' в каждой сгенерированной странице будет добавляться комментарий .

Следует также отметить, что после загрузки хуков доступны следующие системные константы, которые можно использовать при обработке прерываний:
  • EXT – содержит расширение файлов фреймворка, по умолчанию .php.
  • KOHANA – базовое имя файла.
  • DOCROOT – корневая директория приложения (DOCUMENT_ROOT).
  • APPPATH – путь к директории application.
  • SYSPATH – путь к директории system.
  • MODPATH – путь к директории modules.

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

$this->profiler = new Profiler;

В приведенном выше примере методы библиотеки Profiler будут доступны в объекте profiler. При необходимости, для изменения функциональности, можно легко расширять и переопределять существующие библиотеки Kohana и создавать собственные. Располагать библиотеки следует в директории application/libraries. Требования к файлам при создании новой библиотеки следующие:
  • Первая буква имени файла прописная, остальные строчные.
  • Имя класса должно совпадать с именем файла и иметь суффикс _Core.
Например, файл библиотеки Book.php должен содержать класс Book_Core.
Файл application/libraries/Book.php:

defined('SYSPATH') or die('No direct script access.');
 
class Book_Core {
 
    //Код библиотеки Book 
 
}
 
?>

Для расширения существующих библиотек фреймворка требования следующие:
  • Имя файла должно совпадать с именем расширяемого файла и иметь префикс MY_
  • Класс библиотеки наследуется от расширяемого класса и имеет такое же имя, но без суффикса _Core.
Например, чтобы расширить класс библиотеки Controller необходимо создать файл MY_Controller.php.
Файл application/libraries/MY_Controller.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:

defined('SYSPATH') or die('No direct script access.');
 
class Profiler_Core {
 
    //Код новой библиотеки Profiler
}
 
?>

Еще одним приятным моментом для разработчика является использование так называемых хелперов – вспомогательных функций. Наряду с библиотеками Kohana предоставляет богатый набор этих функций, но в отличие от библиотек, для доступа к методам которых нужно было инициализировать объект, все методы хелперов являются статическими, и доступны в момент обращения к ним. Так же как и библиотеки, хелперы автоматически загружаются системой, и потому нет необходимости беспокоиться об их загрузке. Для доступа к методу любого хелпера достаточно обратиться к нему в нужном месте кода:

$url = url::base();

Механизм добавления, расширения и переопределения классов хелперов полностью аналогичен такому же механизму у библиотек. Это же относится и к соглашениям в отношении именования файлов и классов хелперов. Следует лишь отметить, что нужно помнить о том, что все методы хелперов статические и должны объявляться ключевым словом static.

Вместо заключения.
Разумеется, в рамках данной статьи невозможно описать весь инструментарий, который Kohana предоставляет разработчику. Цель статьи лишь познакомить вас с основными принципами работы фреймворка и дать понять насколько может быть оправдано и полезно применение каркасной среды разработки, а именно Kohana. При создании реальных проектов вы можете легко воспользоваться огромным набором методов и инструментов, которые предоставляет фреймворк и понять насколько это просто, удобно. Подробное описание можно найти в документации на официальном сайте разработчика по адресу http://docs.kohanaphp.com. Я надеюсь, что вы не напрасно потратите время, посвятив его изучению Kohana.





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

Комментариев нет:

Отправить комментарий