Итак, Кохану мы благополучно установили. Давайте попробуем разобраться, откуда же появляется эта ужасная надпись 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, то увидим, что теперь все работает как надо.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
Добрый день. Установила кохану в корень сайта. МодРирайт к апачу подключен. Если в адресной строки обращаться к корню, то hello world появляется, если обращаться http://localhost/welcome/test, то выдает Not Found. Так тоже пробовала http://localhost/Welcome/Test, результата нет. ПОдскажите, пожалуйста, в чем может быть проблема?
.htaccess имеется
Все получилось.
Нужно было добавить AllowOverride All на папку в httpd.conf
А если это сервер на хостинге, где отсутствует доступ к httpd.conf, что делать будем?
для этого и .htaccess!
При попытке переименовать «example.htaccess» в «.htaccess» выскакивает сообщение «Следует ввести имя файла». Что я делаю не так, подскажите?
В тотал коммандере пытаетесь ? Попробуйте просто в проводнике windows переименовать.
Нет, в проводнике
Попробуйте тогда наоборот в тотале. Я просто помню, что какой-то из них ругается действительно на все это дело.
Денис Васильевич, спасибо.
я не смогла переименовать example.htaccess.помогите
Закоментируй строку RewriteBase /
в .htaccess
Если при вводе «http://localhost/kohana/welcome/test» всё равно выводит ошибка 404, то мне помогло:
1) Заходим в файл .htaccess и комментируем строчку «RewriteBase /»
ИЛИ
2)Строчку выше раскомментируем и в конце файла .htaccess меняем последнюю строчку на
«RewriteRule .* папка_с_вашим_проектом/index.php/$0 [PT]»
ИЛИ
3)В том же файлике .htaccess меняем RewriteBase / на
«RewriteBase /папка_с_вашим_проектом»
У меня xampp.