Итак, Кохану мы благополучно установили. Давайте попробуем разобраться, откуда же появляется эта ужасная надпись 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, то увидим, что теперь все работает как надо.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
Доброго времени суток! Скажите, что эта за константа такая APPPATH, — пошарил Нэт, — не смог найти ничего вразумительного.
Эта константа в индексе объявляется
В ней хранится путь до папки 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???