Первые шаги

Комментарии: 113  Просмотры: 67 967

Итак, Кохану мы благополучно установили. Давайте попробуем разобраться, откуда же появляется эта ужасная надпись hello, world! и даже попробуем заменить ее на что-то другое. Как я уже говорил, в Кохане точкой входа является файл index.php. Если вы его откроете, то почти в самом конце увидите подключение еще одного весьма важного файла под названием bootstrap.php. Чтобы вы не подумали, что я обманываю, вот код:

// Bootstrap the application
require APPPATH.'bootstrap'.EXT;

Если внимательно посмотреть на самое начало файла, то там консанта EXT как раз определяется (как .php), т.е. можно сделать так, что файлы будут иметь другое расширение (не .php) и таким образом всех запутать. Но лучше все-таки этого не делать.
Ну а константа APPPATH — это собственно путь к файлу (который кстати можно гибко настроить). «Собирается» этот путь следующим образом (тут же в файле, рядышком):

$application = 'application';
...
// Set the full path to the docroot
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);
 
// Make the application relative to the docroot, for symlink'd index.php
if ( ! is_dir($application) AND is_dir(DOCROOT.$application))
    $application = DOCROOT.$application;
...
// Define the absolute paths for configured directories
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);

Думаю тут все понятно — мы получаем абсолютный путь к нашему файлу (кстати совершенно аналогично пути прописаны и для двух других папок). Из всего этого видно, что искать файл bootstrap.php надо в папке application. Собственно там он и лежит, прямо в корне. Откроем его и посмотрим в самый низ. Там есть такие строчки:

/**
 * 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',
        ));

Пока не будем сильно разбираться, что здесь написано, т.к. Роуты мы рассмотрим более подробно несколько позже. Но чисто визуально видно, что здесь прописан запуск контроллера по умолчанию и контроллером этим является контроллер welcome. А лежит он в папке application/classes/controller. Если мы заглянем в него, то увидим там класс Controller_Welcome у которого есть метод action_index(), который как раз и выводит приветствие. Давайте поэкспериментируем и создадим еще один метод, например test:

public function action_test()
{
    $this->response->body('test!');
}

Как нам теперь вывести test! на экран ? Есть два варианта. Можно прописать в bootstrap.php, чтобы этот метод запускался по умолчанию. Просто в Роуте меняем index на test, т.е. пишем:

Route::set('default', '(<controller>(/<action>(/<id>)))')
        ->defaults(array(
            'controller' => 'welcome',
            'action'     => 'test',
        ));

Запускаем и получаем нашу надпись. Ну или второй вариант (только верните index обратно). Запуск через так называемый ЧПУ (человеко-понятный УРЛ). Попробуйте ввести в адресной строке такой URL:
http://kohana/welcome/test и запустите. Сработало ? На самом деле и не должно было. Так как мы не настроили Кохану до конца. В принципе, если мы поменяем адрес на такой http://kohana/index.php/welcome/test, то все запустится. Но выглядит это мягко говоря странно. Убрать этот index.php в адресной строке очень просто. В файле bootstrap.php есть настройки, в которые мы должны добавить одну строчку ‘index_file’ => FALSE:

/**
 * Initialize Kohana, setting the default options.
 *
 * The following options are available:
...
 * - string   index_file  name of your index file, usually "index.php"       index.php
...
 */
Kohana::init(array(
        'base_url'   => '/',
        'index_file' => FALSE
));

Если почитать комментарий, то видно какие параметры может принимать массив для передачи в статический метод init класса Kohana. Среди них есть как раз ключ index_file, которому мы присваиваем значение FALSE, т.е. не хотим видеть файл index_file.
Следующее, что нужно сделать, — это переименовать файл example.htaccess, который лежит в корне сайта, в .htaccess, чтобы включить модуль Mod Rewrite.
Теперь если мы запустим наш первый вариант, напишем в адресной строке http://kohana/welcome/test, то увидим, что теперь все работает как надо.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 113 коммент.

На XAMPP нужно создать виртуальный хост. Тогда вызов из строки браузера, например, такой

http://kohana

даст правильный результат.

:) похоже вы боитесь запуска из подкаталога
чтобы запустилось по адресу http://localhost/kohana/welcome/test надо в .htaccess изменить
RewriteRule .* index.php/$0
на
RewriteRule .* подкаталог/index.php/$0

Респектище автору, сделал все по инструкции, заработало с первого раза. Кстати, для начинающих разработчиков, могу БЕСПЛАТНО предоставить место на своем VPS в размере 10 Мб, для освоения коханы. Дам хостинг с поддержкой php как модуль Apache и FTP доступ к папке, но только на сабдомене nkl.su, например example.nkl.su. Молодежь, кому надо, пишите на мыло nikinik[шотландский терьер]inbox.ru. В теме указать «Дайте мне БЕСПЛАТНЫЙ хостинг» в письме укажите имя сабдомена и желаемый логин от FTP. В ответном письме я пришлю созданный под ваши нужды сабдомен и FTP доступы. Желаемый логин и название сабдомена могут быть изменены, в виду своей занятости.
P.S.
Это не реклама моего блога, я просто хочу помочь молодым ребятам, у которых еще нет денег на нормальный хостинг и домен и они мучаются с ковырянием этого Denwerа, а не с освоением коханы.

в 3.2.2 казус с ЧПУ устранен.
index.php в адресной строке уже не появляется.

Доброе время суток.
Подскажите, пожалуйста с одним моментом. Работаю с XAMPP 1.8.1
1. фреймворк размещен в папке kohana в каталоге htdocs
2. в bootstrap изменена следующая строка
Kohana::init(array(
‘base_url’ => ‘/kohana/’,
‘index_file’ => false,
));
3.example.htaccess переименован в .htaccess

Однако, когда пытаюсь в адресной строке написать http://localhost/kohana/welcome/test
у меня открывает индексный файл xampp,а когда я удалил его, то ошибка 404. Помогите пожалуйста, уже неделю поркаюсь и нет толка.

Это я как понимаю на трех компьютерах только у меня ничего не получается?

Это скорее связано с XAMPP, чем с Коханой. Я не работаю с XAMPP и поэтому ничего не могу подсказать. Но по идее тут base_url не надо указывать…это для подпапки типа http://kohana/kohana

Разобрался, если у кого возникнут такие проблема в XAMPP необходимо немного подкорректирровать и файл .htaccess

«RewriteBase /kohana»

А у меня нужно было в.htaccess изменить:
1. RewriteBase /kohana
2. RewriteRule .* /kohana/index.php/$0 [PT]

Еще в apache настройки дефолтные были, которые запрещают modrewrite. Нужно поменять AllowOverride None на AllowOverride All. На Ubuntu этот файл лежит в /etc/apache2/sites-availabel/default

Может кому понадобиться, а то я много время убил на это)

Как быть если ОС не разрешает переименовать example.htaccess в .htaccess (пишет введите наименование)?

Я в Total Commander-е работаю. Там переименовывает без проблем.

Всем привет.
я новичок в теме kohana.
начил изучать версию 3.3 с помошчю вашего сайта.
надеюсь что 3.3 нет огромних отличий от 3.2

суть вопроса:
сделал все как пишет сверху, но такой адрес
http://kohana/welcome/test
видает «Not Found».
не знаю в чом проблема. может в новой 3.3 что не так настраиваеться.

спасибо за помошчь и извините за ошибки :)

В 3.3 названия файлов и папок должны начинаться с большой буквы.

все файли і папки в директории application?

Сделал все, как Вы сказали:
HTTP_Exception_404 [ 404 ]: The requested URL welcome/test was not found on this server.

Версия 3.2.2. Конкретно 3.2.0 не нашел. Помогите, не пойму в чем причина. Спасибо.

bootstrap.php
……
Kohana::init(array(
‘base_url’ => ‘/’,
‘index_file’ => ‘FALSE’,
));
……
Route::set(‘default’, ‘((/(/)))’)
->defaults(array(
‘controller’ => ‘welcome’,
‘action’ => ‘test’,
));

welcome.php

public function action_index()
{
$this->response->body(‘test!’);
}

Вопрос снят. Ошибку нашел. Всем спасибо!

Проверка доступности хтмл-тэгов в поле комментария.

Проблема: Kohana 3.3 если следовать инструкции выше выдает A valid cookie salt is required. Please set Cookie::$salt.
Решение: в /application/bootstrap.php прописываем Cookie::$salt = ‘xxxxxxxxx’, где xxxxxxxxx это случайная последовательность символов латиницы и/или цифр.



Оставить комментарий или два

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