Framework kohana
Содержание:
- Modules
- Три главных плюса CMF
- Kohana 3.0 — упрощаем себе жизнь
- Modules
- Memcached и метки. Реализация для фреймворка Kohana
- Начало работы с Kohana
- Контроллер
- Web Application Development Frameworks
- Methods
- Модуль авторизация через ВКонтакте для Kohana
- Пример доски объявлений на Kohana
- Фреймворки для разработки веб-приложений
- История
- Ставим Kohana
- Вышел Kohana 3.0
- Programming with Kohana and Preparations
- Hello world на Kohana
- Масштабирование веб-приложений с помощью HMVC
- Делаем первое представление
- Kohana Framework
Modules
-
Kohana
- Debug
- HTTP_Cache
- I18n
- Kohana
- Kohana_Config_Writer
- Request
- Request_Client
- Request_Client_Curl
- Request_Client_External
- Request_Client_HTTP
- Request_Client_Internal
- Request_Client_Stream
- Response
- Route
- UTF8
- View
-
Configuration
- Config
- Config_File
- Config_Group
- Kohana_Config_File_Reader
- Kohana_Config_Reader
- Kohana_Config_Source
-
Controller
- Controller
- Controller_Template
- Controller_Welcome
-
Exceptions
- HTTP_Exception
- HTTP_Exception_300
- HTTP_Exception_301
- HTTP_Exception_302
- HTTP_Exception_303
- HTTP_Exception_304
- HTTP_Exception_305
- HTTP_Exception_307
- HTTP_Exception_400
- HTTP_Exception_401
- HTTP_Exception_402
- HTTP_Exception_403
- HTTP_Exception_404
- HTTP_Exception_405
- HTTP_Exception_406
- HTTP_Exception_407
- HTTP_Exception_408
- HTTP_Exception_409
- HTTP_Exception_410
- HTTP_Exception_411
- HTTP_Exception_412
- HTTP_Exception_413
- HTTP_Exception_414
- HTTP_Exception_415
- HTTP_Exception_416
- HTTP_Exception_417
- HTTP_Exception_500
- HTTP_Exception_501
- HTTP_Exception_502
- HTTP_Exception_503
- HTTP_Exception_504
- HTTP_Exception_505
- HTTP_Exception_Expected
- HTTP_Exception_Redirect
- Kohana_Exception
- Request_Client_Recursion_Exception
- Request_Exception
- Session_Exception
- UTF8_Exception
- Validation_Exception
- View_Exception
-
HTTP
- HTTP
- HTTP_Header
- HTTP_Message
- HTTP_Request
- HTTP_Response
-
Helpers
- Arr
- Cookie
- Date
- Feed
- File
- Form
- Fragment
- HTML
- Inflector
- Num
- Profiler
- Task_Help
- Text
- URL
- Upload
-
Logging
- Log
- Log_File
- Log_StdErr
- Log_StdOut
- Log_Syslog
- Log_Writer
-
Minion
- Minion_Exception
- Minion_Exception_InvalidTask
-
Models
- Model
-
Security
- Encrypt
- Encrypt_Mcrypt
- Encrypt_Openssl
- Security
- Valid
- Validation
-
Session
- Session
- Session_Cookie
- Session_Native
Kohana/Auth
- Auth
- Auth_File
- Auth_ORM
- Model_Auth_Role
- Model_Auth_User
- Model_Auth_User_Token
- Model_Role
- Model_User
- Model_User_Token
Kohana/Cache
- Cache
- Cache_Apc
- Cache_Apcu
- Cache_Arithmetic
- Cache_Exception
- Cache_File
- Cache_GarbageCollect
- Cache_Memcache
- Cache_MemcacheTag
- Cache_Memcached
- Cache_Sqlite
- Cache_Tagging
- Cache_Wincache
Kohana/Codebench
- Codebench
Controllers
- Controller_Codebench
Tests
- Bench_ArrCallback
- Bench_AutoLinkEmails
- Bench_DateSpan
- Bench_ExplodeLimit
- Bench_GruberURL
- Bench_LtrimDigits
- Bench_MDDoBaseURL
- Bench_MDDoImageURL
- Bench_MDDoIncludeViews
- Bench_StripNullBytes
- Bench_Transliterate
- Bench_URLSite
- Bench_UserFuncArray
- Bench_ValidColor
- Bench_ValidURL
Kohana/Database
- DB
- Database
- Database_Expression
Configuration
- Config_Database
- Config_Database_Reader
- Config_Database_Writer
Drivers
- Database_MySQLi
- Database_PDO
Exceptions
- Database_Exception
Models
- Model_Database
Query
- Database_Query
- Database_Query_Builder
- Database_Query_Builder_Delete
- Database_Query_Builder_Insert
- Database_Query_Builder_Join
- Database_Query_Builder_Select
- Database_Query_Builder_Update
- Database_Query_Builder_Where
Query/Result
- Database_MySQLi_Result
- Database_Result
- Database_Result_Cached
Session
- Session_Database
Kohana/Image
- Image
Drivers
- Image_GD
- Image_Imagick
Kohana/ORM
- ORM
- ORM_Validation_Exception
Kohana/UnitTest
- Unittest_Database_TestCase
- Unittest_Tests
Kohana/Userguide
- Kodoc
- Kodoc_Class
- Kodoc_Markdown
- Kodoc_Method
- Kodoc_Method_Param
- Kodoc_Property
Controller
- Controller_Userguide
Undocumented
- Kodoc_Missing
- Minion_CLI
- Minion_Task
- Unittest_Helpers
- Unittest_TestCase
- Unittest_TestSuite
Три главных плюса CMF
Если от фреймворков не было особой пользы, то никто бы не решился использовать их в своих проектах — жизнь современного разработчика и так достаточно тяжела. Из наиболее ощутимых плюсов CMF можно выделить:
- Оптимизированный код. Над фреймворками трудятся разработчики, уделяющие оптимизации достаточно много времени.
- Скажи «нет» велосипедам. Как правило, в фреймворке уже имеются готовые решения для типичных задач. Тут тебе и структура папок, и вспомогательные библиотеки, и куча всяких вкусностей. Многие вещи изначально готовы к работе и позволяют разработчику сразу приступить к разработке функционала приложения, не развлекаясь написанием кучи рутинного кода.
- Упрощенная командная работа. Если проект разрабатывается целой командой, то применение CMF (особенно популярного) дает ощутимый плюс при появлении в команде новенького. Ему будет проще включиться в проект, так как для этого необходимо ознакомиться с CMF, по которому наверняка написано множество статей и мануалов.
Kohana 3.0 — упрощаем себе жизнь
Фреймворк — это хорошо, это здорово, это возможность сэкономить кучу времени на раздумьях над архитектурой будущего приложения, но… Фреймворк как таковой — это каркас. И, на примере Kohana 3.0, о которой в данной статье пойдет речь, каркас этот надо, в той или иной степени, допиливать.
Теперь давайте по-порядку, чем мы сейчас займемся:
- -Расширим базовый контроллер, добавив в него жизненно необходимые методы и работу с юзерами (которая присутствует в 99% проектов, хотя бы на уровне административного логина)
- -Создадим свой фронт-контроллер для более удобной и красивой работы с вью-файлами
- -Реализуем вывод ошибок валидации через фронт-контроллер
- -Улучшим базовый класс View
- -Ну и еще кое-какие полезные мелочи
Итак, начнем…
Modules
-
Kohana
- Debug
- HTTP_Cache
- I18n
- Kohana
- Kohana_Config_Writer
- Kohana_Core
- Request
- Request_Client
- Request_Client_Curl
- Request_Client_External
- Request_Client_HTTP
- Request_Client_Internal
- Request_Client_Stream
- Response
- Route
- UTF8
- View
-
Configuration
- Config
- Config_File
- Config_Group
- Kohana_Config_File_Reader
- Kohana_Config_Reader
- Kohana_Config_Source
-
Controller
- Controller
- Controller_Template
- Controller_Welcome
-
Exceptions
- HTTP_Exception
- HTTP_Exception_400
- HTTP_Exception_401
- HTTP_Exception_402
- HTTP_Exception_403
- HTTP_Exception_404
- HTTP_Exception_405
- HTTP_Exception_406
- HTTP_Exception_407
- HTTP_Exception_408
- HTTP_Exception_409
- HTTP_Exception_410
- HTTP_Exception_411
- HTTP_Exception_412
- HTTP_Exception_413
- HTTP_Exception_414
- HTTP_Exception_415
- HTTP_Exception_416
- HTTP_Exception_417
- HTTP_Exception_500
- HTTP_Exception_501
- HTTP_Exception_502
- HTTP_Exception_503
- HTTP_Exception_504
- HTTP_Exception_505
- Kohana_Exception
- Request_Exception
- Session_Exception
- UTF8_Exception
- Validation_Exception
- View_Exception
-
HTTP
- HTTP
- HTTP_Header
- HTTP_Message
- HTTP_Request
- HTTP_Response
-
Helpers
- Arr
- CLI
- Cookie
- Date
- Feed
- File
- Form
- Fragment
- HTML
- Inflector
- Num
- Profiler
- Text
- URL
- Upload
-
Logging
- Log
- Log_File
- Log_StdErr
- Log_StdOut
- Log_Syslog
- Log_Writer
-
Models
- Model
-
Security
- Encrypt
- Security
- Valid
- Validation
-
Session
- Session
- Session_Cookie
- Session_Native
Kohana/Auth
- Auth
- Auth_File
- Auth_ORM
- Model_Auth_Role
- Model_Auth_User
- Model_Auth_User_Token
- Model_Role
- Model_User
- Model_User_Token
Kohana/Cache
- Cache
- Cache_Apc
- Cache_Arithmetic
- Cache_Exception
- Cache_File
- Cache_GarbageCollect
- Cache_Memcache
- Cache_MemcacheTag
- Cache_Sqlite
- Cache_Tagging
- Cache_Wincache
Kohana/Codebench
- Codebench
Controllers
- Controller_Codebench
Tests
- Bench_ArrCallback
- Bench_AutoLinkEmails
- Bench_DateSpan
- Bench_ExplodeLimit
- Bench_GruberURL
- Bench_LtrimDigits
- Bench_MDDoBaseURL
- Bench_MDDoImageURL
- Bench_MDDoIncludeViews
- Bench_StripNullBytes
- Bench_Transliterate
- Bench_URLSite
- Bench_UserFuncArray
- Bench_ValidColor
- Bench_ValidURL
Kohana/Database
- DB
- Database
- Database_Expression
Configuration
- Config_Database
- Config_Database_Reader
- Config_Database_Writer
Drivers
- Database_MySQL
- Database_PDO
Exceptions
- Database_Exception
Models
- Model_Database
Query
- Database_Query
- Database_Query_Builder
- Database_Query_Builder_Delete
- Database_Query_Builder_Insert
- Database_Query_Builder_Join
- Database_Query_Builder_Select
- Database_Query_Builder_Update
- Database_Query_Builder_Where
Query/Result
- Database_MySQL_Result
- Database_Result
- Database_Result_Cached
Session
- Session_Database
Kohana/Image
- Image
Drivers
- Image_GD
- Image_Imagick
Kohana/ORM
- ORM
- ORM_Validation_Exception
Kohana/UnitTest
- Unittest_Database_TestCase
- Unittest_Tests
Kohana/Userguide
- Kodoc
- Kodoc_Class
- Kodoc_Markdown
- Kodoc_Method
- Kodoc_Method_Param
- Kodoc_Property
Controllers
- Controller_Userguide
Undocumented
- Kodoc_Missing
- Unittest_Helpers
- Unittest_TestCase
- Unittest_TestSuite
Memcached и метки. Реализация для фреймворка Kohana
Приветствую всех.
Уже довольно давно разрабатываем проект на кохане и встала необходимость эффективного кэширования данных. Не то, чтобы вопрос производительности стоит очень остро в данный момент, но, хотелось бы подготовится заранее, а не писать систему кэширования в ночь после волны посетителей. Да и посещаемость постоянно растет, а в некоторые моменты бывают всплески до 3х раз по сравнению с обычным днем.
Собственно, в выборе системы кэширования особых вопросов не было — на ум сразу приходит всем известный memcached.
Если вы хотя бы немного смотрели memcached, то должны были отметить, что, по большому счету, он поддерживает только 2 операции: получение значения, запись значения. Нет никакой возможности вытянуть все ключи по определенному признаку или паттерну. Сделано это сознательно, с целью сделать его максимально простым, а значит, максимально быстрым.
Итак, представим ситуацию, что мы храним в кэше данные записей блога под ключами post_. В определенный момент нам требуется сбросить все записи с постами, при этом не очищая кэш полностью (там могут хранится другие данные, значения которых все еще актуальны). Ситуация получается безвыходная. Мы не знаем список ключей постов, получить их нет возможности, сбросить ключи по паттерну тоже невозможно. Что же делать?
Начало работы с Kohana
Программа самозагрузки Kohana
Прежде чем приступить к разработке приложения, загрузите программу раскрутки и завершите установку.
Запустите следующую команду, чтобы отредактировать файл загрузки при помощи nano:
Отредактируйте временной пояс:
Установите локаль при помощи параметра setlocale:
Установите местонахождение каталога приложения:
Включите модули:
Сохраните и закройте файл (CTRL+X и Y для подтверждения).
Завершающие действия и тестирование
Теперь протестируйте установку и при помощи веб-браузера откройте приложение:
Убедившись, что все работает должным образом, удалите install.php. Для этого запустите:
Снова посетите вышеприведенный URL; на экране появится сообщение «hello, world!». Это значит, что теперь запросы обрабатываются должным образом через нужный шаблон.
Cloud ServerKohanaLAMP stackMVCPHPUbuntu
Контроллер
Контроллер в MVC выполняет роль некоего диспетчерарегулировщика. Он не должен изменять или добавлять данные, производить расчеты и т.д. Его цель — обслуживать поступающие запросы и на каждый такой запрос соответствующим образом отвечать. Например, пользователь обращается к главной странице сайта нашего журнала — https://xakep.ru. Его запрос в первую очередь получает определенный контроллер (если рассматривать на примере шаблона MVC). После получения запроса он выполняет действие, забинденное на данный тип запроса. Причем сам контроллер ни в коем случае не должен содержать код для выборки данных и т.д. Сама выборка должна быть организована в модели.
Web Application Development Frameworks
Kohana is a web application development framework. Given PHP’s nature as a language and the way the code written is executed on computers, there is no strict requirement to exploit frameworks to quickly develop applications when working with it. However, for any serious application that aims to have a long(-ish) lifecycle (making use of code already written once and with more than a single developer working on it), using a framework means making a ton of things much simpler.
What Are Frameworks?
Much like the dictionary definition of the word framework, web application frameworks provide both an essential structure to begin developing and a glue layer to hold everything together in a sound and logical way that makes sense for those who are familiar with the framework itself.
These bases come with many of the necessary common tools that are almost always needed to develop web applications such as processing incoming requests, generating and populating templates, returning responses, handling security and authentication, managing cookies (and sessions) and more.
What Makes a Framework “Light”?
Depending on the amount of tools a framework is shipped with out of the box, it is either referred to as a lightweight or an all-in-one (full stack, batteries included, etc.) solution. Kohana, albeit being extremely powerful and functionally rich, can still be considered light because of the freedom it gives to developers working with it, and the way it has been designed and set to operate.
Methods
current()
returns the current URI string. This method accepts one optional parameter. If you set it to TRUE the query string will be included in the return value.
// site_domain = 'localhost/kohana/' // site_protocol = 'http' // index_page = 'index.php' // url_suffix = '.html' // Current URL: http://localhost/kohana/index.php/welcome/home.html?query=string echo url::current();
Returns
welcome/home
While
echo url::current(TRUE);
Returns
welcome/home?query=string
base()
returns the base URL defined by the and in .
// site_domain = 'localhost/kohana/' // site_protocol = 'http' echo url::base();
Generates
http://localhost/kohana/
accepts two optional parameters. Set the first parameter to if you want to append the defined in to the base URL. Via the second parameter you can overwrite the default from .
// site_domain = 'localhost/kohana/' // site_protocol = 'http' // index_page = 'index.php' echo url::base(TRUE, 'https');
Generates
https://localhost/kohana/index.php
site()
returns a URL based on the , , , defined in .
// site_domain = 'localhost/kohana/' // site_protocol = 'http' // index_page = 'index.php' // url_suffix = '.html' echo url::site();
Generates
http://localhost/kohana/index.php/.html
accepts two optional parameters. You can pass URL segments via the first one. The second one allows you to overwrite the default from .
// site_domain = 'localhost/kohana/' // site_protocol = 'http' // index_page = '' // url_suffix = '.html' echo url::site('admin/login', 'https');
Generates
https://localhost/kohana/admin/login.html
file()
returns the URL to a file. Absolute filenames and relative filenames are allowed.
- filename
- include the index.php
echo url::file('download.zip');
Produces
http://domain.tld/download.zip
title()
returns a properly formatted title, for use in a URI. The first parameter, the input title string, is mandatory. The optional second parameter is used to set the separator character. By default this is a dash. You can only change this to an underscore.
$input_title = ' __Ecléçtic__ title\'s entered by cràzed users- ?> '; echo url::title($input_title, '_');
Generates:
eclectic_titles_entered_by_crazed_users
What happens to the input title? All non-alphanumeric characters, except for dashes or underscores (depending on the second parameter), will be deleted. However, non-ascii characters will first be (for example: becomes ) in order to keep the URL title as readable as possible. Finally, the URL title is converted to lowercase.
redirect()
generates an HTTP Server Header (302) and runs the system.redirect event, which will redirect the browser to a specified URL, by default defined in .
will always call the php function to prevent further script execution.
url::redirect('http://www.whitehouse.gov');
Will redirect the browser to the White House website.
The optional second parameter can be used to set the redirect method. The default is 302.
// site_domain = 'localhost/kohana/' // site_protocol = 'http' url::redirect('aboutus', 301);
Will redirect with a 301 header to .
If you wish to send a Multiple Choice (300) redirect, provide an array of URIs to the redirect method:
url::redirect(array('aboutus','http://www.kohana.php/'), 300);
The first URI in the array is considered the preferred URI and will be placed in the Location header. All of the URIs will then be output in a HTML unordered list. Generally the browser will follow the location header and this list will never be seen. However, there is no standard defined behavior for what a user agent should do upon receiving a 300 and the list could be used to present the user with the choices you have given.
Модуль авторизация через ВКонтакте для Kohana
После открытия API ВКонтакте сразу появилось несколько статей по созданию быстрой авторизации на своём сайте пользователей vk.com, в т.ч. и на PHP. Решил заняться написанием модуля авторизации для Kohana.Документация по API очень хилая, пришлось изучать js-скрипты durov.at и переносить некоторый функционал на PHP (отправка POST-запроса с получением полной информации о пользователе, вместо ajax-овой реализации на durov.at). Самым сложным местом оказалось генерирование уникальной подписи запроса (как они объясняют, «подпись запроса по стандартной схеме»), т.к. этот процесс нормально не описан.Модуль Vk умеет логиниться и получать информацию о пользователе и, соответственно, разлогиниваться. Информация хранится в cookie и в сессии. При желании, можно складывать всё в БД, запрашивать дополнительную информацию о пользователе и т.д.
Подробное описание на странице модуля в github. Не забываем создать свое приложение ВКонтакте для тестирования и записать полученные API ID, ключ приложения и защищенный ключ в , а также создать файл по примеру в описании.
Пример доски объявлений на Kohana
Kohana — довольно молодой PHP фреймворк, форк CI, всецело завязанный на ООП. К достоинствам Kohana можно отнести использование всех возможностей PHP5 на 100%, высокую скорость работы, «легковесность» и простоту как использования, так и изучения. Из минусов отчетливо выделяется небольшое комьюнити, как следствие, не шибко качественная документация и небольшое количество модулей и библиотек.
Не так давно своё знакомство с фреймворками я начинал именно с Kohana и, надо сказать, я был удивлен, насколько легко он мне поддался. Думал будет намного сложнее. Но очень сказывалась нехватка документации и примеров кода. Зарывшись в маны и разбор исходников, через некоторое время, я восполнил интересующие меня пробелы относительно Kohana, и поэтому решил написать эту статью, дабы другим хабралюдям, оказавшимся в схожей ситуации не пришлось по ночам не досыпать и лечить головные боли.
Под катом пример доски объявлений, написанный с помощью Kohana, возможно местами он не претендует на рациональность и здравый смысл, но всё-же я надеюсь услышать конструктивную критику.
Статья рассчитана на людей, имеющих понятие об MVC и ООП, но не имевших, либо мало имевших, дело с фреймворками.
Фреймворки для разработки веб-приложений
Учитывая природу РНР и способ обработки написанного кода, при разработке приложения необязательно использовать фреймворк. Однако фреймворк способен сделать процесс создания приложения, которое должно долго просуществовать (благодаря хорошо написанному коду, над которым работало несколько специалистов), гораздо проще и быстрее.
Что такое фреймворк?
Фреймворки предоставляют необходимую структуру для начала разработки веб-приложений, а также надежно связывают все компоненты, обеспечивая надежное и логичное построение приложения.
Они, как правило, поставляются с большим количеством общих инструментов, которые обрабатывают важные для жизни веб-приложений процессы (среди них обработка входящих запросов, создание и заполнение шаблонов, возврат ответов, обработка безопасности и аутентификации, управление файлами cookies и сессиями, и многое другое).
Что делает фреймворк легким?
В зависимости от количества инструментов, с которыми фреймворк поставляется «из коробки», фреймворки можно условно разделить на легкие и «все в одном» (или полный стек). Несмотря на мощность и внушительное количество функций, фреймворк Kohana все же считается легким, поскольку (согласно способу проектирования и установки) он дает разработчику некоторую свободу.
История
Проект Kohana был создан как ветвь PHP фреймворка CodeIgniter под именем Blue Flame. Главной причиной форка был переход к более открытой для общественности модели разработки, потому, что многие пользователи были недовольны скоростью разработки и исправления ошибок в CodeIgniter. Rick Ellis — создатель и владелец CodeIgniter — был счастлив видеть форк своего проекта, но помогать отказался; он подтолкнул новый проект к созданию собственной документации и посоветовал переименовать проект. В июле 2007 Blue Flame был переименован в Kohana для того, чтобы избежать проблем с авторскими правами в будущем.
Название Kohana было выбрано, когда разработчики начали просматривать словари коренных американцев для того, чтобы выбрать слово, не нарушающее авторские права. Kohana на языке Сиу значит «быстрый».
В апреле 2014 года главный разработчик shadowhand заявил, что развитие проекта завершено, однако фреймворк продолжает разрабатываться и поддерживаться сообществом, а на официальном сайте продолжают выходить обновления.
4 февраля 2017 года проект был закрыт, главный разработчик «shadowhand» сообщил об этом на сайте фразой «Kohana is DEAD».
После закрытия проекта участники сообщества рассматривали различные варианты фреймворков для миграции, и как выяснилось, любая миграция была бы очень трудной. Поэтому участники сообщества создали форк проекта, который был назван Koseven. Koseven может работать в качестве замены для движка Kohana в проектах, которые до сих пор его используют. Основная цель проекта это исправление ошибок и поддержка новых версий PHP, в то время, как новый функционал рекомендуется добавлять через расширения.
Ставим Kohana
Для начала прогуляйся до официального сайта и загрузи последнюю версию фреймворка. Загруженный архив закачай к себе на хост и извлеки его содержимое. Попробуй обратиться к директории своего хоста, в которую ты извлек фреймворк и… — приготовься к облому. Наверняка ты не пройдешь Environment Tests (тест окружения).
В моем случае тесты на запись в директорию хранения кэша и логов тоже завершились неудачей. Для исправления ситуации нужно всего лишь выставить права на запись для этих директорий. В общем, выставляй права и пробуй обновить страницу. В случае успеха увидишь текст: «Your environment passed all requirements. Remove or rename the install.php file now». Помимо радостного известия о готовности окружения для работы фреймворка, текст сообщения требует от тебя удаления файла install.php. Не будем брыкаться и выполним эту пустяковую просьбу. Удалив инсталляционный сценарий, попробуй обновить страницу. Если ты все сделал правильно, то браузер выплюнет девственно чистую страницу с текстом «hello, world».
Вышел Kohana 3.0
Как-то странно, что на Хабре еще нет такой новости, но это может быть связанно с тем, что Москва просыпается немного позже Сибири.
Итак, собственно, свершилось — широко известный в узких кругах PHP фреймворк Kohana наконец переступил порог мажорных версий еще раз, и во всеобщий доступ выложен Kohana 3.0 final.
Обширного чейнджлога, кроме обещаний написанных в посте homm’а я пока не нашел, но от этого новость менее радостной не становится. Собственно:Ссылка на тред с обсуждениямиСсылка для скачиванияСсылка на задачиАпдейт от dohlik
1. Мануал на английском
2. Cобственно исходники на гитхабе, можно форкать и дополнять, в том числе и переводить на русский
Programming with Kohana and Preparations
Kohana, as a light framework, consists of a bunch of files scattered across carefully structured directories which, in the end, is transferred to the production server and used to run the web application. Therefore, each Kohana package can be considered a web application.
Note: In our examples, we will be working on a droplet, running the latest version of Ubuntu. To build web applications with Kohana, you can work on your home computer until the production step and later push your code for publication.
Note: We are going to use a default LAMP (Linux — Apache — MySQL — PHP) set up in our droplet to work with Kohana. To quickly set up a LAMP stack on a Ubuntu droplet, you can use:
Hello world на Kohana
Перед тем как перейти к рассмотрению полезного примерчика, попробуем наколбасить собственный «Hello world». Создадим новый текстовый файл и напишем в нем следующий текст:
В этом клочке кода я описываю наш первый контроллер — класс Controller_Test, унаследованный от Controller
Обрати внимание на имя класса. В имени содержится Controller (обязательный префикс), а после него идет непосредственно название контроллера
Его мы пишем с большой буквы. В моем случае именем контроллера является Test. Контроллеры и модели должны храниться в директории App/ classes/controller и App/classes/model.
Масштабирование веб-приложений с помощью HMVC
Последние десять лет мы наблюдаем второй цикл веб-дизайна – сайты превращаются в приложения и уже практически не появляется новых проектов, не обладающих некой долей интерактивности. Увеличение сложности ПО, разрабатываемого для интернета, вызвало необходимость в структурированном и взвешенном проектировании приложений.
На сегодняшний день наиболее часто используемым паттерном проектирования сайтов является Модель-Вид-Контроллер (MVC). Повсеместное его использование отчасти вызвано успехом и популярностью фреймворка Ruby on Rails. Сейчас MVC является практически синонимом веб-разработки среди всех платформ.
При выполнении задач, активно нагружающих процессор, современные сайты все больше полагаются на выделенные ресурсы. Этому, в частности, поспособствовало открытие компаниями Amazon и Google облачных сервисов, которые позволяют разработчикам существенно уменьшить нагрузку на процессоры их собственных серверов. Каждый сервис обычно проектируется в виде отдельного элемента ПО, который запускается внутри своего домена и использует свои собственные ресурсы.
Когда имеешь дело со скромными бюджетами, обычно довольно сложно убедить клиентов в преимуществах финансирования более чем одного завершенного фрагмента программного обеспечения. Как показывает мой опыт, множество из них придерживаются мнения, что масштабируемость не является актуальной задачей. Они «с нетерпением ждут того дня, когда придется этим обеспокоиться».
Для уменьшения первоначальных вложений обычно принимают решение о том, что приложение должно быть спроектировано в виде целостной программы, содержащей все требуемые функции. Если сайт быстро обретет популярность, это станет проблемой. У меня остались не очень приятные впечатления от рефакторинга плохо масштабируемых кодовых баз. К тому же, это может потребовать большого количества ресурсов и денег. В идеале приложения должны расти по мере необходимости и не требовать в процессе этого крупных финансовых затрат.
Делаем первое представление
Ты знаешь, что представления в архитектуре MVC предназначены для отображения сгенерированного контента. Модель получает данные в сыром виде и возвращает их контроллеру, а тот, в свою очередь, должен передать их представлению. Уже во вьюшке создается красивая обертка, готовая к выводу пользователю.
Все созданные представления должны храниться в папке views, расположенной в директории твоего приложения. По умолчанию директорией приложения является Application. Создавать представления чрезвычайно просто. Ради эксперимента попробуем создать представление about. Его код будет выглядеть примерно так:
Я специально не стал приводить остальную часть кода, так как там может присутствовать абсолютно любой html-код. Нас интересует только то, что расположено между тегами <title>. Там я отправляю на «печать» значение одноименной переменной. Получается, что заголовок страницы будет устанавливаться извне — из контроллера.
Теперь посмотрим на обновленный код ранее рассмотренного нами контроллера:
В первой строке я связываю переменную about_page с представлением about. Для этого я использую конструкцию View::factory. Далее я устанавливаю переменную title и вывожу само представление.
Kohana Framework
Kohana HMVC (Hierarchical Model View Controller) framework offers — probably — all the tools necessary to build a modern web application that can be developed rapidly and deployed/maintained easily using the PHP language.
Kohana’s Features
Compared to other similar solutions, Kohana sets itself apart not with its features but with the way it presents these features and how it performs them.
-
Kohana comes with many of the commonly required additional tools (modules)such as encryption, validation, database access etc.
-
It offers the possibility to simply expand the defaults.
-
Allows building commercial applications with its BSD licensing.
-
Getting started and setting up is extremely fast and easy compared to heavy and complicated frameworks.
-
All the modules and the way things function are designed and built using classes and object. The framework sustains the “Don’t Repeat Yourself” principle.
-
Offers profiling and debugging tools.
-
Its code is very well documented and it comes with a relatively good documentation with examples and good explanations.
-
Prefers following conventions over configurations.
Kohana’s Standard (Out-of-The-Box) Modules
Below are some of the out-of-the-box modules of Kohana.
-
Auth: User authentication and authorization.
-
Cache: Common interface for caching engines.
-
Codebench: Code benchmarking tool.
-
Database: Database agnostic querying and result management.
-
Image: Image manipulation module.
-
ORM (Object Relational Mapper): A modeling library for object relational mapping.
-
Unittest: Unit testing module.