пятница, 7 января 2011 г.

Kohana 3: Первые шаги

Давно хотелось по плотнее взяться за фреймворк Kohana, тем более что сталкиваться с ним приходилось, а нормально по работать не удалось. Будем считать, что начнётся изучение с нуля, но базовые знания настроек Apache и программирования на php уже имеются. Так как линуксового сервера под рукой нет, то будем использовать WinXp с установленным XAMPP, но к линуксовому серверу вернёмся по позже, как я его до собираю (скорее всего будет ubuntu server).

У нас имеется XAMPP 1.7.3 установленный в c:\xampp

  • Apache 2.2.14 c:\xampp\apache
  • PHP 5.3.1 c:\xampp\php
  • MySQL 5.1.41. c:\xampp\mysql

Начнём

Создадим в hosts запись

127.0.0.1     kohana.local

Для Apache создадим запись нашего виртуального хоста:

#NameVirtualHost     kohana.local
<VirtualHost 127.0.0.1>
     ServerAdmin     webmaster@kohana.local
     ServerName      kohana.local

     DocumentRoot      c:/xampp/vhosts/kohana/webroot

     <Directory "c:/xampp/vhosts/kohana/webroot">
          Options FollowSymLinks Indexes Includes execCGI
          AllowOverride All
          Order Allow,Deny
          Allow From All
     </Directory>

     AccessFileName .htaccess

     ErrorLog      c:/xampp/vhosts/kohana/logs/error_log
     CustomLog      c:/xampp/vhosts/kohana/logs/access_log common
</VirtualHost>

В каталоге c:\xampp\vhosts создадим подкаталог kohana и в нём два подкаталога webroot - корневой каталог сайта и logs - каталог для логов сервера.

Теперь приступим к скачиванию и установке Kohana. Как скачать и распаковать дистрибутив написано множество руководств, по этому пойдём по другому пути возьмём исходники с >GitHub репозитария Kohana и устанавливать будем за пределами корневого каталога. У меня установлен TortoiseGit, последнюю версию которого можно взять с http://code.google.com/p/tortoisegit/

Запустим консоль и перейдём в c:\xampp\vhosts\kohana\

Последовательно ыполним следующие команды:

git clone git://github.com/kohana/kohana.git
  cd kohana/
  git submodule init
  git submodule update

Через некоторое время мы имеем базовое текущей версии с официальными модулями.

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

[submodule "modules/userguide"]
     path = modules/userguide
     url = git://github.com/kohana/userguide.git

Настройка Kohana

Kohana скачан, но зайдя по адресу http://kohana.local мы видим унылую картину.


Скопируем из каталога с копией репозитария kohana файлы index.php и install.php в webroot.

Исправим в index.php пути к application, modules и system на следующие:

$application = '../kohana/application';
$modules = '../kohana/modules';
$system = '../kohana/system';

В application/bootstrap.php исправим: date_default_timezone_set('America/Chicago') на свою временную зону и setlocale(LC_ALL, 'en_US.utf-8') на свою локаль ('ru_RU.utf-8').

Снова пытаемся зайдя по адресу http://kohana.local


Если всё нормально, то удаляем install.php.

Скопируем из каталога репозитария файл example.htaccess, переименуем его в .htaccess.

Следующую строку можно удалить или заккоментировать, так как в нашем случае каталоги application, modules и system находятся за пределами DocumentRoot.

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

Обновив браузер мы увидим сообщение: "hello, world!" это строка от контроллера Controller_Welcome расположенного в application/classes/controller/welcome.php.

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Welcome extends Controller {

     public function action_index()
     {
          $this->request->response = 'hello, world!';
     }
    
} // End Welcome

Для начала расширим контроллер добавив к нему метод action_test():

public function action_test()
     {
          $this->request->response = 'Test message :)';
     }

Если попытаемся увидеть наше сообщение по адресу http://kohana.local/test, то нас ждёт разочарование, ибо увидим только сообщение об ошибке. Это связанно с тем, что адрес формируется по следующему принципу:

http://example.com/index.php/<controller>/<action>

или, без index.php в адресе:

http://example.com/<controller>/<action>

Наш адрес будет: http://kohana.local/welcome/test/

Создание контроллера

Теперь попробуем создать свой первый контроллер для Kohana 3, для этого желательно ознакомиться с правилами создания контроллеров в Kohana 3:

  • Контроллеры должны находится в (под-)каталоге
  • Имя файла контроллера должно быть в нижнем регистре, например first.php
  • Класс контроллера должен совпадать с именем файла, начинаться с заглавной буквы и иметь префикс Controller_, например Controller_First
  • Контроллер должен иметь предком класс Controller или быть потомком контроллера с классом Controller
  • Контроллер метод которого не объявлен публичным (public) и не имеет префикса action_ (например action_index()) не может быть определён через Route
  • Вывод контроллера должен быть присвоен свойству $this->request->response

Начнём конструировать наш контроллер, назовём его First, соответственно имя класса будет Controller_First и имя файла first.php. Создадим метод вызываемый фреймворком по умолчанию и выведем строку 'Мой первый контроллер для kohana 3'.

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_First extends Controller {

     public function action_index()
     {
          $this->request->response = 'Мой первый контроллер для Kohana 3';
     }
} //End

Строка defined('SYSPATH') or die('No direct script access.'); предотвращает прямое обращение к файлу контроллера, в нашем случае её можно убрать, так как файл контроллера расположен за пределами DocumentRoot и обратится к файлу на прямую не возможно.

Открыв в браузере http://kohana.local/first/ мы увидим сообщение "Мой первый контроллер для Kohana 3".

Расширим наш контроллер, но теперь добавим метод который способен получать параметр из URI:

public function action_dynamic($param)
     {
          $this->request->response = 'Параметр: '.$param;
     }

Откроем в браузере: http://kohana.local/first/dynamic/Тестовая%20строка

Должна отобразится строка: "Параметр: Тестовая строка"

На этом пока всё, продолжение будет в ближайшее время

P.S. За основу взяты материалы с Inside DealTaker и Unofficial Kohana 3.0 Wiki

Другие части руководства:

Похожие по тематике посты:

4 комментария:

Анонимный комментирует...

Не знал, что RewriteRule в .htaccess можно закомментировать... И реально целый день рыл сеть в поисках ответа на вопрос, почему выдается ошибка 500...

Спасибо, что просветил ))

Анонимный комментирует...

Доброе время суток. Я только начал знакомиться с Kohana, и начал я с вашей статьи. У меня есть пару вопросов. При установке в Optional Tests некоторые строки были выделены красным, могли ли из-за этого не работать параметры из URL, делал как вы но выдает ошибки. И, при $this->request->response у меня ничего не выводило, сделал как в action_index $this->response->body, в вашем случае может я что то упустил?

snake.nf комментирует...

Начиная с Kohana 3.1 произошли довольно крупные изменения, в частности класс request был разделен на два класса request и response, в связи с этим способ вывода: $this->response->body('Текст')

После нового года постараюсь дописать руководство с изменениями.

Анонимный комментирует...

Не могу разобраться почему ошибка выходит при Расширении контроллера, не получает он у меня параметр из URL