Быстренько пробежимся по самым верхушкам. Буквально галопом по европам.
Хоть и звучит легкомысленно, это позволит нам усвоить элементарные вещи, и даст возможность зацепиться за незнакомый мир Kohana.
URL в Kohana
———————–
С самого начала нам нужно понять, как читать URL в Kohana, и начнём с самого простого. Для дальнейших рассуждений будем предполагать, что Kohana установлена на сервере http://localhost в папке kohana.
Кто работал с CodeIgniter – можете не читать этот раздел, всё то же самое.
В общем виде URL будет выглядеть примерно так

(изображение взято отсюда)
В этом примере
- 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 , нашёл вопиющую ошибку. Исправляюсь
Посты по теме:
RSS-подписка
Ну-ну, жду дальнейших уроков )
Кстати, могли бы все-таки написать, как убрать 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/ Тогда все будет ок.
Отличная статья, хорошо бы еще добавить о каталогах и более сложных роутах.
Если не сложно добавьте о . Думаю многим начинающим будет полезно.