Первые шаги

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

Итак, Кохану мы благополучно установили. Давайте попробуем разобраться, откуда же появляется эта ужасная надпись 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 коммент.

Доброго времени суток! Скажите, что эта за константа такая APPPATH, — пошарил Нэт, — не смог найти ничего вразумительного.

Эта константа в индексе объявляется

// Define the absolute paths for configured directories
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);

В ней хранится путь до папки Application

Подскажите пожалуйста … Пытаюсь освоить этот фреймворк … Всё выполняю, но не получается сделать ЧПУ в виде http://kohana/welcome/test, пишетЖ

Not Found

The requested URL /welcome/ was not found on this server.

Хотя и в Apache включал модуль ReWrite. В чём моя ошибка ???
По ссылке http://kohana/index.php/welcome/test переходит, а по http://kohana/welcome/test — нет ???

Т.е. вы и ‘index_file’ => FALSE написали и файл example.htaccess переименовали и не работает ?

Так точно … Что это может быть ??? Просто везде эта метода и все пишут что работает нормально, а у меня нет … Я уже и на более позднюю версию kohana откатывал и всё равно ничего не помогло.

А где проверяете ? На локалхосте ?

Конечно. А где ж еще мне бы сначала для себя освоить, а потом …

Ну многие сразу заливают на хостинг. Связка — Денвер ?

Да, только скачано всё в отдельности: Apache 2.2, PHP 5, MySQL, phpMyadmin и сам фреймворк … Всё работает, иду по видеоурокам Kohana-3.1, вот на моменте получения ЧПУ и запарился …

попробуйте заменить
RewriteRule .* index.php/$0 [PT]
на
RewriteRule .* index.php [L]

В каком это файле ???

.htaccess

тоже самое, такое ощущение как будто Kohana вообще не реагирует на изменеия в файле

напишите туда белиберду. если продолжит открывать страницу, значит действительно не видит.

Да написал белиберду, а он всё равно по ссылке http://kohana/index.php/welcome/test переходит, а по http://kohana/welcome/test — нет. Где включить поддержку в Kohana этого файла ???

А это уже не Коханы проблемы. Это настройки вашего локального сервера. Работать не будет на любом вашем сайте, при чем тут Кохана.

Деня, спасибо. Вычитал что надо было ещё включить в доступе к папке со своими сайтами AllowOverride All и Ооо чудо заработало:

[b]AllowOverride All[/b]
# Options None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all

Поздравляю вас :)
Теперь можно кодить дальше.

Можно пожалуйста подробнее где именно прописывать это нужно не могли бы копирнуть ваш пример….

я просто не настраивал никаких виртуальных имен… я в папку test1.ru все залил…

в httpd.conf прописал эти настройки :

AllowOverride All
# Options None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all

типа так :

AllowOverride All
# Options None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all

Всё равно index.php в адресной строке нужен…без него не работает….
Помогите : )

…….
AllowOverride All
# Options None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all

не прописало директорию выше…((
Directory «c:/WebServers/home/test1.ru/www»

Сначала проверяете, работает ли вообще .htaccess (как вариант можно написать туда белиберду). Если не работает, то да, что-то с настройками сервера. Какая у вас связка стоит, вы же ничего не написали.

спс разобрался…. нужно было кохану в корень ставить (test1.ru) иначе как то криво работает….

Работает нормально. Просто если ставите не в корень, то надо это указывать.

Здравствуйте, помогите пожалуйста настроить ЧПУ. Вроде всё сделал согласно инструкции, но…

Использую денвер, для фреймворка создал отдельный хост, типа KOHANA->WWW, в директорию WWW, согласно Вашей инструкции распаковал содержимое архива с фреймворком, hello world увидел )

Прописал в bootstrap.php:

Kohana::init(array(
‘base_url’ => ‘/’,
‘index_file’ => FALSE
));

Подключил htaccess:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed

Order Deny,Allow
Deny From All

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Но адреса вида http://kohana/welcome/index не работают (

Дааа, пора прекращать работать ночами )
Разобрался. Всё было банально — при переименовании дефолтного example.htaccess случайно убрал точку о_О

Денис, я в PHP мало понимаю.
но пытаюсь пройти описание.

не получается следующее:
я прописала в файле bootstrap.php :
Kohana::init(array(
‘base_url’ => ‘/’,
‘index_file’ => FALSE
));

и переименовала файл example.htaccess в example_1.htaccess

потом ввела в адр.строку:
http://kohana/welcome/test

то в броузере вот такое предупреждение:
Notice: Use of undefined constant ‘index_file’ — assumed ‘‘index_file’’ in Z:\home\kohana\www\application\bootstrap.php on line 84
[Денвер: показать возможную причину ошибки]test!

на 84 стр. находится:
‘index_file’ => FALSE

что я сделала не так?

спасибо

извиняюсь.
я переименовала файл example.htaccess в .htaccess

ну, вобщем, всё равно ничего не получается.
все файлы и папки коханы находятся в корневой папке сайта (т.е. ничего вложенного нет)

в чём причина?
вот что пишет броузер:
http://s1.ipicture.ru/uploads/20120511/NjDRVva7.jpg

Неправильно написан index_file. В неправильных кавычках или вообще без кавычек.

Спасибо за мануал. Часа два мучился с htaccess’ом. Вся проблема была в том, что я переименовал example.htaccess в kohana.htaccess, предположив, что под .htaccess подразумевается любое имя. До такой жизни я дошёл, потому что виндоус по дефолту не даёт создать файл .htaccess, говоря о том, что надо ввести имя файла.
Потом переименовал файл в .htaccess своим текстовым редактором, и всё заработало.
Возможно стоит на это обратить внимание в мануале? Пока искал решение проблемы в интернетах, видел кучу вопросов на эту тему. Может быть моя ошибка и глупая, но винда действительно не даёт создавать файл формата .xxx

Хм. Я даже не знал, что такая проблема существует. Просто всю жизнь пользуюсь тотал коммандером, там все ок.

также не забывайте редактировать директиву в htaccess
# Installation directory, к примеру на:
RewriteBase /myfolder/kohana
— если папка kohana находится в http://site/myfolder/kohana

И base_url в файле bootstrap.php
Упоминал про это в уроке
http://kohanaframework.su/starting/configuring_1

Всем Windows-пользователям рекомендую для локальных («домашних») разработок Winginx http://winginx.net

Маленький дистрибутив, не в ущерб функционалу: PHP 5.3(5.4) MySQL 5, nginx 1.2.1. В комлекте: phpMyAdmin, Adminer, RockMongo, phpMemcachedAdmin, HeidiSQL. Интуитивно-понятные настройки (большая часть в графическом интерфейсе). У меня к примеру ЧПУ заработали и без редактирования bootstrap.php и переименовывания example.htaccess. Т.е. у меня и так работает: http://kohana/index.php/welcome/test и так работает: http://kohana/welcome/test.

Вообще по моему очень грамотная сборка для Windows на базе nginx.

Ну мы ведь сайт собираем не для того, чтобы локально на него любоваться :) Вы уверены, что на хостинге тоже заработает без редактирования ?

А что на хостинге nginx нет? о_О

У меня на хостинге например апач

как на xampp это все проделать? я все делаю как здесь написано но в итоге у меня ошибка 500???



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

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