Kohana для чайников. Hello world.



kohanaБыстренько пробежимся по самым верхушкам. Буквально галопом по европам.

Хоть и звучит легкомысленно, это позволит нам усвоить элементарные вещи, и даст возможность зацепиться за незнакомый мир Kohana.

URL в Kohana
———————–
С самого начала нам нужно понять, как читать URL в Kohana, и начнём с самого простого. Для дальнейших рассуждений будем предполагать, что Kohana установлена на сервере http://localhost в папке kohana.

Кто работал с CodeIgniter – можете не читать этот раздел, всё то же самое.

В общем виде URL будет выглядеть примерно так

uri_explain
(изображение взято отсюда)

В этом примере

  • http://localhost/kohana/ – собственно базовый URL инсталляции kohana.
  • index.php – скрипт который обрабатывает любые запросы к сайту и перенаправляет их дальше, своего рода диспетчер. Ещё его называют фронт-контроллер.
  • welcome - пример названия контроллера. Что такое контроллер? – не уверен что смогу дать точное определение, но думаю что смогу показать простой пример простого контроллера, и всё встанет на свои места. Примеры смотреть ниже.
  • search – вызываемая функция контроллера
  • php – задаваемый параметр для функции. Параметр может быть один, их может быть несколько, также параметры могут отсутствовать.

Если указан контроллер, и не указана функция – будет предпринята попытка вызвать функцию index.

Если не указан контроллер – будет предпринята попытка вызывать контроллер по-умолчанию. После установки – это контроллер welcome.php.
Исправить контроллер по-умолчанию можно для Kohana 2 в файле application/config/routes.php. Если такого файла нет – скопируйте из system/config/routes.php. Если такого файла и там тоже нет – создайте сами application/config/routes.php и напишите там такой текст:

1
2
3
<?
$config['_default'] = 'вашконтроллер';
?>

В Kohana3 для назначения контроллера по-умолчанию нужно редактировать application/bootstrap.php примерно следующим образом

1
2
3
4
5
Route::set('default', '(<controller>(/<action>(/<id>)))')
	->defaults(array(
		'controller' => 'вашконтроллер',
		'action'     => 'index',
	));

Кстати с помощью несложных фокусов с Rewrite можно избавиться и от фронт-контроллера index.php в URL. Пример соответствующего файла .htaccess есть в архиве.

Kohana 2 “Hello, world!”
———————–
Итак, наконец-то (к концу второго поста из цикла постов для чайников) мы наконец-то приблизились к написанию реально работающего кода. Мы попытаемся написать контроллер hello, который будет при обращении к http://localhost/index.php/hello выводить надпись “Hello, world!”.

Для этого нам нужно будет создать файл application/controllers/hello.php и написать в нём следующий код

1
2
3
4
5
6
7
8
<?php defined('SYSPATH') or die('No direct script access.');
 
class Hello_Controller extends Controller{
 
    public function index() {
        echo 'Hello, world!';
    }
}

Разберём этот пример.

Первая строчка – дань безопасности. Она нужна, чтобы некий злоумышленник не мог обратиться к скрипту напрямую. Её просто нужно ставить в каждом PHP файле, который будете создавать в Kohana.

Далее в примере видим класс Hello_Controller, который наследуется от Controller. Надо сказать, что название класса контроллера должно быть именно таким по соглашению о наименованиях :

  • Файл контроллера должен называться прописными буквами
  • Класс контроллера должен начинаться с заглавной буквы и должен кроме названия контроллера иметь суффикс_Controller

И наконец мы видим тривиальную функцию index.

Если мы захотим обрабатывать URL http://localhost/index.php/hello/asdasdasd , то нам будет нужно добавить метод asdasdasd() в контроллер.

1
2
3
4
5
6
7
8
9
10
11
<?php defined('SYSPATH') or die('No direct script access.');
 
class Hello_Controller extends Controller{
 
    public function index() {
        echo 'index';
    }
    public function asdasdasd() {
        echo 'asdasdasd';
    }
}

Методы контроллера соответствуют строкам URL

  • action_index()
    • http://localhost/kohana/
    • http://localhost/kohana/index.php/
    • http://localhost/kohana/index.php/index
  • action_asdasdasd()
    • http://localhost/kohana/index.php/asdasdasd

Kohana 3 “Hello, world!”
———————–
Здесь многое похоже, но есть ряд отличий.

  • Файл должен находиться в папке application/classes/controllers/hello.php
  • Название класса контроллера должно состоять из названия контроллера, начинающегося с заглавной буквы и префиксаController_
  • Методы контроллера должны содержать обязательный префикс “action_“. Смысл его я надеюсь уяснить в следующих постах.
1
2
3
4
5
6
7
8
9
10
11
<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller_Hello extends Controller{
 
    public function action_index() {
        echo 'index';
    }
    public function action_asdasdasd() {
        echo 'asd';
    }
}

В остальном всё остаётся так же как и в Kohana 2

Пока всё =)
Продолжение следует. Постараюсь надолго не исчезать.

UPD: Спасибо NosFire , нашёл вопиющую ошибку. Исправляюсь

Посты по теме:

  1. Kohana для чайников. Избавляемся от index.php
  2. Kohana для чайников. Настраиваем базу данных
  3. Kohana для чайников. Работа с шаблонами.
  4. Kohana для чайников. Простейший роутинг
  5. Kohana для чайников. Инсталляция.

Категории Kohana |
автор: altesack / Среда, Декабрь 02, 2009 / 7 комментов »

7 комментов

    Ну-ну, жду дальнейших уроков )
    Кстати, могли бы все-таки написать, как убрать index.php из URL и думаю, стоило бы делать примеры сразу без него, чтобы это было что-то ближе к реальным проектам.

    @ Nayjest:
    Хм.. учту.

    Хоть и некропостинг, но:

    –> Но это можно исправить в файле application/config/route.php. Если такого файла нет – скопируйте из system/config/route.php. Если такого файла и там тоже нет – создайте сами application/config/route.php и напишите там такой текст

    По крайней мере в 2.3.4: файл routes.php, а не route.php

    @ NosFire:
    Опять моя ошибка. На этот раз серьёзная. Спасибо, исправляюсь

    >Файл должен находиться в папке ‘application/classes/controllers/hello.php’
    в Kohana 3 есть папка ‘application/classes/controller’ (без буквы ’s’ на конце)

    В 3-ей кохане при попытке использовать метод asdasdasd через url http://localhost/kohana/index.php/asdasdasd будет выдаваться ошибка. Из-за того, что метод asdasdasd является дочерним от контроллера Hello. Вызывать его надо следующим образом: http://localhost/kohana/index.php/hello/asdasdasd/ Тогда все будет ок.

    Отличная статья, хорошо бы еще добавить о каталогах и более сложных роутах.
    Если не сложно добавьте о . Думаю многим начинающим будет полезно.

Ответить