Приветствую вас мои многоуважаемые читатели! Этой статьей я начинаю цикл статей по созданию блога на любимом мною фреймворке 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. Какие то архитектурные пояснения я буду давать кончено так сказать, как работает мой велосипед я объясню, а о остальном мне кажется вам лучше расскажет документация чем я :)