Kohana 3.2 – Собственный блог шаг за шагом — Часть 1

Приветствую вас мои многоуважаемые читатели! Этой статьей я начинаю цикл статей по созданию блога на любимом мною фреймворке Kohana 3.

Сразу хотел бы оговориться, о том, что в этих статьях я не буду объяснять основы построения веб приложений, а так же html, css и php. Основная моя цель познакомить вас с фреймворком Kohana 3, а так же дать вам пример того как нужно писать приложения на Kohana 3.2.

И так приступим…

1. Постановка задачи

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

Панель администратора:

  1. Изменение настроек блога (Изменение).
  2. Управление пользователями (Добавление, Удаление, Изменение, Настройка прав).
  3. Управление тегами (Добавление, Удаление, Изменение).
  4. Управление рубриками древовидной структуры (Добавление, Удаление, Изменение).
  5. Управление постами (Добавление, Удаление, Изменение, Предварительный просмотр).
  6. Модерирование комментариев (Удаление, Изменение).

Публичная часть блога:

  1. Вывод постов в формате списка анонсов
    1. На главной (От новых к старым)
    2. Рубрики постов (От новых к старым)
    3. Тега поста (От новых к старым)
  2. Ввод страницы поста
  3. Добавление комментариев к посту

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,
	),
);

Ну, вот собственно и все что от нас требовалось, на этом прекрасном моменте я хотел бы закончить эту статью, до встречи в следующих статьях, в которых мы перейдем непосредственно к разработке приложения.

Скачать исходные коды урока.

6 комментариев

  1. zhas:

    Здравствуйте не подскажите скачал ваш пример при проверке на денвере выводит ошибку «ErrorException [ Fatal Error ]: Class ‘Config_Database’ not found»
    думаю в файле .htacess или же нет?

    • Radik:

      Здравствуйте, нет судя по ошибке проблема с автозагрузкой классов. Скорее всего .htaccess тут не причем. Так же я бы вам не рекомендовал использовать Denwer, это весьма косячная и устаревшая сборка, раз вы пользуетесь Windows, то используйте лучше OpenServer для новичков он по лучше будет, так же там есть визуальный интерфейс для управления сервером, а в идеале лучше использовать для веб разработки Linux.

  2. Нурлан:

    Здравствуйте! Очень поучительная статья! Не могли бы выставить пару примеров работ с модулем auth.
    Заранее спасибо!!!

    • radik:

      Я на данный момент как раз занимаюсь следующей статьей из этой серии и в ней как раз и будет разбираться базовая работа с модулем auth, а так же будет создан CRUD модуль для управления пользователями. Так что все будет :)

  3. Vital:

    Большое вам спасибо Сергей за полезное начинание. Систематизированных и достаточно внятных обучающих русских материалов по последней версии данного фреймворка до сих пор нет.
    У меня к вам несколько пожеланий, которые родились в процессе просмотра аналогичной информации.
    Во-первых самая распространенная проблема что у программистов не получается преподавать. Специалисту очень трудно влезть в шкуру чайника, а ведь искать и читать ваши уроки будут именно чайники типа меня. Поэтому уделяйте внимание таким мелочам, как «что это за строка непонятная с кучей стрелочек и двоеточий». Например к тому моменту как приступить к изучению Коханы я думал что основы ООП ПХП я неплохо усвоил хотя бы на уровне синтаксиса. Однако код фреймворка меня просто ввел в ступор. В общем чтоб народ читая ваши уроки понимал что происходит, а не тупо код копировал.
    Во-вторых сначала объясните первостепенные вещи как то страница 404, форма обратной связи, подключение баз данных (не только MySQL), гостевая и т.д. А то видел я обучающий блог одного деятеля, который вот уже четвертый месяц хелперы переводит, но о простеньком сайтике-визитке ни слова.
    Ну и в-третьих желаю вам не забрасывать это благое начинание.
    С уважением….))))

    • radik:

      Спасибо за полезный отзыв, но думаю все, что вы просите в рамках одной статьи написать не получится. Я имею в виду, то расписывать, как работает php и т.п. … как я и написал, в статье я хотел бы показать общие принципы создания сайта на Kohana. Какие то архитектурные пояснения я буду давать кончено так сказать, как работает мой велосипед я объясню, а о остальном мне кажется вам лучше расскажет документация чем я :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *