Kohana
- Homepage: Framework Kohana
Ниже рассматривается 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 .
FAQ Kohana 3.3+
- Глобальные настройки ядра Kohana Kohana_Core и Bootstrap.
- Чтобы убрать (спрятать) index.php в Что такое ссылка URL нужно в массиве инициализации ключу index_file присвоить значение FALSE и включить правила для Как включить mod_rewrite? в файле .htaccess. В конфигурационном файле нашего приложения bootstrap.php допишем эту строку
Kohana::init(array( 'base_url' => '/', 'index_file' => FALSE, ));
- Для кеширования роутов их нужно поместить в конструкцию If перед методом Route::cache(TRUE);. Если всё сделано правильно, то сгенерированный кеш будет находится в папке application/cache/.
if (!Route::cache()) { // Set routes here Route::cache(TRUE); }
- Валидация находится в классе Valid (valid.php)
- Произвести очистку всех элементов массива $_POST от пробелов в начале и в конце
$_POST = Arr::map('trim', $_POST);
- Методы before() и after() вызываются соответственно до и после вызова action в контроллере, если нужно произвести какие-либо манипуляции с данными. Обязательно в методе before сначала вызывается родительский before, а потом уже манипуляции с нашими данными, в методе after сначала работа с данными, потом вызов родительского after.
- Вынести все роуты в отдельный файл из bootstrap.php. Создадим в папке application новый файл routes.php и переносем в него весь Route::set('default')… А на его месте в bootstrap.php подключем файл
// External routes require_once APPPATH . 'routes' . EXT;
- Ошибка Kohana_Exception [ 0 ]: Database method list_columns is not supported by Kohana_Database_PDO говорит о том, что модуль ORM не может получить при помощи PDO PHP список полей таблицы. Структура таблиц хранится в переменной $_table_columns и загружается при каждом выполнении скрипта. Для устранения ошибки достаточно вручную заполнить свойство $_table_columns в используемой модели. Например, для модуля auth переопределим модель Model_User, которая использует таблицу users (Model_Role соответственно таблица role)
<?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; } } }
- Передача параметров в действие(action) контроллера.
Route::set('grammar', 'grammar/<grpage>', array('grpage' => '.+')) ->defaults(array( 'controller' => 'grammar', 'action' => 'index', ));
public function action_index() { $output = $this->request->param('grpage', 0); //...
Объекты Request, Response, GET, POST
Объект Request - один из основных элементов ядра фреймворка. В Kohana 3.2 он выполняет следующие задачи:
- Подготовка запроса. Обработка исходных данных: IP клиента, заголовки браузера (User_Agent), используемый HTTP-метод запроса (GET/POST/PUT/DELETE), и т.д. Все эти данные передаются в созданный экземпляр класса Request. Таким образом, у каждого объекта создается свое окружение
- Поиск маршрута, подходящего под URI запроса
- Запустить необходимый контроллер на выполнение
- Получить от контроллера ответ и сохранить его в виде экземпляра класса Response.
По сути, объект Request выполняет контроль над выполнением приложения, от получения клиентских данных до генерации сервером ответа.
- В Kohana v3.1+ Класс Request имеет методы query() и post() для обработки GET и POST запросов соответственно. Они работают в обе стороны и для получения и для установки:
// 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
Объект класса Validation служит для проверки данных полученных от пользователя, например при помощи HTTP Метод HTTP POST запроса.
Хелперы
Хелперы (Helpers — помощники) - вспомогательные функции доступные в любом месте приложения на Kohana.
Класс HTML:
- Подключить стили и скрипты
<?= HTML::style('css/grid.css'); ?> <?= HTML::script('js/content.js'); ?>
- HTML- ссылки: HTML::anchor ($uri — адрес ссылки, $title — текст ссылки, Массив $array — (не обязательный параметр) атрибуты, по умолчанию null, $protocol - (не обязательный параметр) специфический протокол, по умолчанию null) — служит для задания ссылки.:
<?= 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'));
- Формирует email адрес для борьбы со спам-ботами:
echo HTML::email($address);
- Атрибуты HTML: HTML::attributes(array $attrs — не обязательный параметр) — служит для задания атрибутов для HTML тегов. Например, мы хотим записать
<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_calendar: активировать через bootstrap.php
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
Mодуль database (PDO)
Настройка Kohana 3.3.0 для работы с базой данный Использование и настройка PostgreSQL c использованием технологии PDO PHP.
- Для подключения модуля нужно раскомментировать строчку с его названием в файле bootstrap.php:
Kohana::modules(array( ... 'database' => MODPATH.'database', // Database access ... ));
- Файл database.php копируем из «modules/database/config/» в «application/config/».
- Редактируем файл «application/config/database.php»
<?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
Модуль Auth. При использование ORM роль Login должна быть назначена всем без исключения пользователям иначе авторизация не пройдет (это требование можно использовать для блокировки пользователя).
- Для получения информации о текущем пользователе используется метод get_user($default), где $default — необязательный параметр, который будет возвращен, если авторизация не выполнена. Пример, для избежания ошибки ErrorException [ Fatal Error ]: Cannot use object of type Model_User as array нужно значения возварашаемые методом get_user()→ явно приводить к массиву as_array()):
if (Auth::instance()->logged_in()) { $user = Auth::instance()->get_user()->as_array(); echo 'Hello, ' . $user['username']; }
или же использовать обращение к объекту
echo 'Hello, ' . $user->username;
Модуль Captcha
- Модуль Captcha и Kohana 3.3.0
Классы
Класс I18n
Класс 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');?>
Класс HTTP
В версии Kohana 3.2 для перенаправления использовался метод объекта Request→redirect(), в версии выше этот функционал перенесен в класс HTTP.
- Перенаправить на внешний ресурс HTTP::redirect('http://news.kh.ua');
- Перенаправить на локальный контроллер HTTP::redirect('admin');
Kohana и 404 Not Found
В Kohana можно использовать свой обработчик Коды состояния HTTP. Методы и структура протокола HTTP ошибок. Создадим обработчик самой распространенной ошибки HTTP 404 Not Found. И укажем ему срабатывать только если переменная Kohana::$environment равна константе PRODUCTION, в любом другом случае запускать системный обработчик ошибок.
- Переопределяем переменную Kohana::$environment(по умолчанию значение DEVELOPMENT) при помощи файле Настройка .htaccess, дописав в него строку
SetEnv KOHANA_ENV PRODUCTION
Вместо .htaccess можно переопределять непосрдственно в bootstrap.php.
- Создаем два файла для обработки 404 ошибки application/classes/HTTP/Exception/404.php и application/views/Errors/404.php. Route::set создавать не надо.
$ 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 />
- Вызвать 404 ошибку можно самостоятельно:
throw new HTTP_Exception_404('File not found');
Kohana подключение своих функций
Иногда возникает потребность подключить(автоподключить) свои функции к 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 (допускается использовать поддиректории, но в этом случае нужно поменять соответственно имя класса),
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах