
Приветствую вас мои многоуважаемые читатели! Этой статьей я начинаю цикл статей по созданию блога на любимом мною фреймворке Kohana 3.
Сразу хотел бы оговориться, о том, что в этих статьях я не буду объяснять основы построения веб приложений, а так же html, css и php. Основная моя цель познакомить вас с фреймворком Kohana 3, а так же дать вам пример того как нужно писать приложения на Kohana 3.2.
И так приступим…
1. Постановка задачи
Как видно из заголовка эта часть статьи посвящена описанию задачи, которую мы будем решать на протяжении всего цикла статей. И так что же будет уметь делать наше приложение?
Панель администратора:
- Изменение настроек блога (Изменение).
- Управление пользователями (Добавление, Удаление, Изменение, Настройка прав).
- Управление тегами (Добавление, Удаление, Изменение).
- Управление рубриками древовидной структуры (Добавление, Удаление, Изменение).
- Управление постами (Добавление, Удаление, Изменение, Предварительный просмотр).
- Модерирование комментариев (Удаление, Изменение).
Публичная часть блога:
- Вывод постов в формате списка анонсов
- На главной (От новых к старым)
- Рубрики постов (От новых к старым)
- Тега поста (От новых к старым)
- Ввод страницы поста
- Добавление комментариев к посту
2. Проектирование БД
Для проектирования БД я привык использовать инструмент MySQL Workbench, поэтому я просто покажу вам получившуюся схему структуры БД в виде скриншота либо вы можете скачать ее в месте, с исходными кодами в конце статьи.

Данная тузла позволяет нам сделать экспорт модели БД в sql скрипт или импортировать структуру БД на сервер непосредственно сделаете это сразу, БД понадобится нам далее.
3. Установка и настройка фреймворка Kohana 3.2
В качестве локального сервера я буду использовать DENWER (ничего личного просто я к нему привык).
Для начала скачаем фремворк kohana 3.2 c официального сайта тут и распакуем содержимое архива в корневую директорию localhost.

Я надеюсь, что вы уже запустили локальный сервер и localhost у вас доступен из браузера. Давайте откроем в браузере http://localhost/. Если вы видите то, что представлено на картинке ниже, то вам повезло, и сервер у вас удовлетворяет всем системным требованиям фреймворка в противном случае вам нужно доводить конфигурацию сервера до ума что как вы, наверное, догадались выходит за рамки текущей статьи и объясняться тут не будет.

Следующим шагом нам нужно удалить всякий мусор из корня (install.php, LICENSE.md, README.md) и переименовать файл example.htaccess в .htaccess, в итоге мы получим:

От мусора, который мог нас “выдать” мы избавились и теперь нам нужно настроить приложение. Для этого открываем файл application\bootstrap.php в любимом текстовом редакторе (если вам интересно, то я использую PHPStorm 3) и настраиваем примерно так:
<?php defined('SYSPATH') or die('No direct script access.');
// -- Environment setup --------------------------------------------------------
// Load the core Kohana class
require SYSPATH.'classes/kohana/core'.EXT;
if (is_file(APPPATH.'classes/kohana'.EXT))
{
// Application extends the core
require APPPATH.'classes/kohana'.EXT;
}
else
{
// Load empty core extension
require SYSPATH.'classes/kohana'.EXT;
}
/**
* Set the default time zone.
*
* @see http://kohanaframework.org/guide/using.configuration
* @see http://php.net/timezones
*/
date_default_timezone_set('Asia/Krasnoyarsk');
/**
* Set the default locale.
*
* @see http://kohanaframework.org/guide/using.configuration
* @see http://php.net/setlocale
*/
setlocale(LC_ALL, 'ru_RU.utf-8');
/**
* Enable the Kohana auto-loader.
*
* @see http://kohanaframework.org/guide/using.autoloading
* @see http://php.net/spl_autoload_register
*/
spl_autoload_register(array('Kohana', 'auto_load'));
/**
* Enable the Kohana auto-loader for unserialization.
*
* @see http://php.net/spl_autoload_call
* @see http://php.net/manual/var.configuration.php#unserialize-callback-func
*/
ini_set('unserialize_callback_func', 'spl_autoload_call');
// -- Configuration and initialization -----------------------------------------
/**
* Set the default language
*/
I18n::lang('ru-ru');
/**
* Set Kohana::$environment if a 'KOHANA_ENV' environment variable has been supplied.
*
* Note: If you supply an invalid environment name, a PHP warning will be thrown
* saying "Couldn't find constant Kohana::<INVALID_ENV_NAME>"
*/
if (isset($_SERVER['KOHANA_ENV']))
{
Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
}
/**
* Initialize Kohana, setting the default options.
*
* The following options are available:
*
* - string base_url path, and optionally domain, of your application NULL
* - string index_file name of your index file, usually "index.php" index.php
* - string charset internal character set used for input and output utf-8
* - string cache_dir set the internal cache directory APPPATH/cache
* - boolean errors enable or disable error handling TRUE
* - boolean profile enable or disable internal profiling TRUE
* - boolean caching enable or disable internal caching FALSE
*/
Kohana::init(array(
'base_url' => '/',
));
/**
* Attach the file write to logging. Multiple writers are supported.
*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));
/**
* Attach a file reader to config. Multiple readers are supported.
*/
Kohana::$config->attach(new Config_File);
Kohana::$config->attach(new Config_Database);
/**
* Enable modules. Modules are referenced by a relative or absolute path.
*/
Kohana::modules(array(
'auth' => MODPATH.'auth', // Basic authentication
// 'cache' => MODPATH.'cache', // Caching with multiple backends
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
'database' => MODPATH.'database', // Database access
// 'image' => MODPATH.'image', // Image manipulation
'orm' => MODPATH.'orm', // Object Relationship Mapping
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'userguide' => MODPATH.'userguide', // User guide and API documentation
));
/**
* Set the routes. Each route must have a minimum of a name, a URI and a set of
* defaults for the URI.
*/
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
На следующем шаге нам нужно настроить соединение с БД для чего копируем файл из директории modules\database\config\database.php в application\config\ database.php и вносим в него свои настройки для подключения к БД.
<?php defined('SYSPATH') or die('No direct access allowed.');
return array
(
'default' => array
(
'type' => 'mysql',
'connection' => array(
/**
* The following options are available for MySQL:
*
* string hostname server hostname, or socket
* string database database name
* string username database username
* string password database password
* boolean persistent use persistent connections?
* array variables system variables as "key => value" pairs
*
* Ports and sockets may be appended to the hostname.
*/
'hostname' => 'localhost',
'database' => 'kohana_blog',
'username' => 'root',
'password' => FALSE,
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
Ну, вот собственно и все что от нас требовалось, на этом прекрасном моменте я хотел бы закончить эту статью, до встречи в следующих статьях, в которых мы перейдем непосредственно к разработке приложения.
Здравствуйте не подскажите скачал ваш пример при проверке на денвере выводит ошибку «ErrorException [ Fatal Error ]: Class ‘Config_Database’ not found»
думаю в файле .htacess или же нет?
Здравствуйте, нет судя по ошибке проблема с автозагрузкой классов. Скорее всего .htaccess тут не причем. Так же я бы вам не рекомендовал использовать Denwer, это весьма косячная и устаревшая сборка, раз вы пользуетесь Windows, то используйте лучше OpenServer для новичков он по лучше будет, так же там есть визуальный интерфейс для управления сервером, а в идеале лучше использовать для веб разработки Linux.
Здравствуйте! Очень поучительная статья! Не могли бы выставить пару примеров работ с модулем auth.
Заранее спасибо!!!
Я на данный момент как раз занимаюсь следующей статьей из этой серии и в ней как раз и будет разбираться базовая работа с модулем auth, а так же будет создан CRUD модуль для управления пользователями. Так что все будет :)
Большое вам спасибо Сергей за полезное начинание. Систематизированных и достаточно внятных обучающих русских материалов по последней версии данного фреймворка до сих пор нет.
У меня к вам несколько пожеланий, которые родились в процессе просмотра аналогичной информации.
Во-первых самая распространенная проблема что у программистов не получается преподавать. Специалисту очень трудно влезть в шкуру чайника, а ведь искать и читать ваши уроки будут именно чайники типа меня. Поэтому уделяйте внимание таким мелочам, как «что это за строка непонятная с кучей стрелочек и двоеточий». Например к тому моменту как приступить к изучению Коханы я думал что основы ООП ПХП я неплохо усвоил хотя бы на уровне синтаксиса. Однако код фреймворка меня просто ввел в ступор. В общем чтоб народ читая ваши уроки понимал что происходит, а не тупо код копировал.
Во-вторых сначала объясните первостепенные вещи как то страница 404, форма обратной связи, подключение баз данных (не только MySQL), гостевая и т.д. А то видел я обучающий блог одного деятеля, который вот уже четвертый месяц хелперы переводит, но о простеньком сайтике-визитке ни слова.
Ну и в-третьих желаю вам не забрасывать это благое начинание.
С уважением….))))
Спасибо за полезный отзыв, но думаю все, что вы просите в рамках одной статьи написать не получится. Я имею в виду, то расписывать, как работает php и т.п. … как я и написал, в статье я хотел бы показать общие принципы создания сайта на Kohana. Какие то архитектурные пояснения я буду давать кончено так сказать, как работает мой велосипед я объясню, а о остальном мне кажется вам лучше расскажет документация чем я :)