Ниже рассматривается Kohana версии 3.3.0(stable) и выше.
Kohana PHP5 Framework использует модель MVC (Model-View-Controller). Установка фреймворка Kohana проста, достаточно запустить из корня файл install.php, который проверит права на директории logs, cache
chmod 0777 application/cache chmod 0777 application/logs
и проверит установлены ли необходимые зависимости PHP. После устранения всех ошибок файл install.php нужно удалить и комментировать в index.php строки:
if (file_exists('install'.EXT)) { // Load the installation check return include 'install'.EXT; }
После установки фреймворка работает только ссылка http://your.domen/index.php/welcome/index .
Kohana::init(array( 'base_url' => '/', 'index_file' => FALSE, ));
if (!Route::cache()) { // Set routes here Route::cache(TRUE); }
$_POST = Arr::map('trim', $_POST);
// External routes require_once APPPATH . 'routes' . EXT;
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Model_User extends Model_Auth_User { protected $_table_columns = array( 'id' => NULL, 'email' => NULL, 'username' => NULL, 'password' => NULL, 'logins' => NULL, 'last_login' => NULL, ); } // End User Model
или переопределить функцию list_columns
<?php defined('SYSPATH') OR die('No direct script access.'); class ORM extends Kohana_ORM { /** * Proxy method to Database list_columns. * * @return array */ public function list_columns() { switch ($this->_table_name) { case 'users': return array( 'id' => NULL, 'email' => NULL, 'username' => NULL, 'password' => NULL, 'logins' => NULL, 'last_login' => NULL, ); break; case 'roles': return array( 'id' => NULL, 'name' => NULL, 'description' => NULL, ); break; case 'roles_users': return array( 'user_id' => NULL, 'role_id' => NULL, ); break; case 'user_tokens': return array( 'id' => NULL, 'user_id' => NULL, 'user_agent' => NULL, 'token' => NULL, 'created' => NULL, 'expires' => NULL, ); break; default: return array(); break; } } }
Route::set('grammar', 'grammar/<grpage>', array('grpage' => '.+')) ->defaults(array( 'controller' => 'grammar', 'action' => 'index', ));
public function action_index() { $output = $this->request->param('grpage', 0); //...
Объект Request - один из основных элементов ядра фреймворка. В Kohana 3.2 он выполняет следующие задачи:
По сути, объект Request выполняет контроль над выполнением приложения, от получения клиентских данных до генерации сервером ответа.
// get $_POST data $data = $this->request->post(); // returns $_GET['foo'] or NULL if not exists $foo = $this->request->query('foo'); // set $_POST['foo'] value for the executing request $request->post('foo', 'bar'); // or put array of vars. All existing data will be deleted! $request->query(array('foo' => 'bar'));
Нужно помнить что установка GET/POST данные не переписывает текущих$_GET/$_POST значений, для отсылки нужно использовать вызов $request→execute(),например как в примере ниже.
public function action_index() { $result = Request::factory('http://news.kh.ua')->execute(); $this->response->body($result); }
Объект класса Validation служит для проверки данных полученных от пользователя, например при помощи HTTP Метод HTTP POST запроса.
Хелперы (Helpers — помощники) - вспомогательные функции доступные в любом месте приложения на Kohana.
Класс HTML:
<?= HTML::style('css/grid.css'); ?> <?= HTML::script('js/content.js'); ?>
<?= HTML::anchor('user/profile', 'Профиль') ?>
<?php echo HTML::anchor('/user/profile', 'My Profile',array('rel'=>'nofollow',));?>
echo HTML::file_anchor('media/doc/user_guide.pdf', 'User Guide');
echo HTML::image('media/img/logo.png', array('alt' => 'My Company'));
echo HTML::email($address);
<div id=”content”></div>
<?php echo “<div”.HTML::attributes(array(‘id’=>’content’).”></div>” ?>
Класс Form:
echo Form::open(‘search', array('method' => ‘get')); echo Form::close();
<?= Form::radio('name', 1, TRUE);?>Строка <?= Form::radio('name', 2, FALSE);?>Столбец
Универсальный git репозитарий для Kohana - содержит ссылки на актуальные репозитории со сторонними модулями и ядром системы.
Kohana::modules(array( ... 'calendar' => MODPATH . 'kohana_calendar', // https://github.com/samwilson/kohana_calendar ...
Копируем файл kohana_calendar/views/calendar.php в директорию application/views/ В контроллере запускаем так
$cal = new Calendar(1,2008); // January, 2008. The default is current month and year $cal->render(); // the view is automatically rendered from the library
Настройка Kohana 3.3.0 для работы с базой данный Использование и настройка PostgreSQL c использованием технологии PDO PHP.
Kohana::modules(array( ... 'database' => MODPATH.'database', // Database access ... ));
<?php defined('SYSPATH') OR die('No direct access allowed.'); return array ( 'default' => array( 'type' => 'pdo', 'connection' => array( 'dsn' => 'pgsql:host=localhost;dbname=mydb', 'username' => 'user', 'password' => 'your_password', 'persistent' => FALSE, ), /** * string identifier set the escaping identifier */ 'table_prefix' => '', 'charset' => 'utf8', 'caching' => FALSE, 'profiling' => TRUE, // 'identifier' => '"', /*для версии PostgreSQL => 9.1*/ ) );
Модуль Auth. При использование ORM роль Login должна быть назначена всем без исключения пользователям иначе авторизация не пройдет (это требование можно использовать для блокировки пользователя).
if (Auth::instance()->logged_in()) { $user = Auth::instance()->get_user()->as_array(); echo 'Hello, ' . $user['username']; }
или же использовать обращение к объекту
echo 'Hello, ' . $user->username;
Класс i18n Интернационализация. В Kohana существует функция
__()
для перевода небольших объемов текста. Например, предварительно в каталоге application/i18n/ должны быть созданы и заполнены файлы переводов en.php, ru.php, uk.php
<!--Russian--> <?php I18n::lang('ru'); echo __('message');?> <!--English--> <?php I18n::lang('en'); echo __('message');?> <!--Ukrainian--> <?php I18n::lang('uk'); echo __('message');?>
В версии Kohana 3.2 для перенаправления использовался метод объекта Request→redirect(), в версии выше этот функционал перенесен в класс HTTP.
В Kohana можно использовать свой обработчик Коды состояния HTTP. Методы и структура протокола HTTP ошибок. Создадим обработчик самой распространенной ошибки HTTP 404 Not Found. И укажем ему срабатывать только если переменная Kohana::$environment равна константе PRODUCTION, в любом другом случае запускать системный обработчик ошибок.
SetEnv KOHANA_ENV PRODUCTION
Вместо .htaccess можно переопределять непосрдственно в bootstrap.php.
$ nano application/classes/HTTP/Exception/404.php <?php defined('SYSPATH') OR die('No direct script access.'); class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 { public function get_response() { // Lets log the Exception, Just in case it's important! Kohana_Exception::log($this); if (Kohana::$environment >= Kohana::DEVELOPMENT) { // Show the normal Kohana error page. return parent::get_response(); } else { $view = View::factory('Errors/404'); // Remembering that `$this` is an instance of HTTP_Exception_404 $view->message = $this->getMessage(); $response = Response::factory() ->status(404) ->body($view->render()); return $response; } } }
$ nano application/views/Errors/404.php <br /> <h2>404 Not Found</h2> <br /> <?= $message ?> <br />
throw new HTTP_Exception_404('File not found');
Иногда возникает потребность подключить(автоподключить) свои функции к Kohana. Наиболее оптимальный и правильный способ это оформить свои пользовательские функции в виде статических методов класса и использовать автоматический загрузчик Kohana. Например, создадим класс DFunction в файле DFunction.php
<?php class DFunction { static function detectlanguage() { $langcode = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']); $langcode = explode(",", $langcode['0']); return $langcode['0']; /* Example for use * $language = DFunction::detectlanguage(); * echo "You have chosen $language as your language in your web browser."; */ } }
Чтобы класс подключился автоматически в ядро Kohana - файл DFunction.php должен находиться в директории classes (допускается использовать поддиректории, но в этом случае нужно поменять соответственно имя класса),