2013-09-10 2 views
1

Недавно я начал работать с инфраструктурой kohana 3.3.1 и столкнулся с некоторыми проблемами.Маршрутизация в Кохане 3.3.1

Я хочу создать различные маршруты для разных точек входа. Прямо сейчас, это маршрут по умолчанию, который, кажется, работает хорошо (я думаю):

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

Когда я иду на веб-сайт, он отображает «Привет, мир!».

У меня есть контроллер под названием Street, расположенный в приложении/классах/Controller/Street.php.

Код для этого контроллера:

<?php defined('SYSPATH') or die('No direct script access.'); 

class Controller_Street extends Controller { 

    public function action_index() 
    { 
     $this->response->body('hello, street!'); 
    } 

Проблема заключается в том, что я хочу, чтобы напечатать/что-то позади URI, и он должен перенаправить к определенному контроллеру, и действия. Но, похоже, это не работает. Я получаю ошибку 404, когда я печатаю «НИЧЕГО» за URI по умолчанию.

Для маршрутов, я использую этот

/** 
* Set the routes. Each route must have a minimum of a name, a URI and a set of 
* defaults for the URI. 
*/ 


Route::set('test1', 'street/<id>') 
    ->defaults(array(
     'controller' => 'street', 
     'action'  => 'index', 
    )); 

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

Любая помощь будет с удовольствием оценили.

EDIT

Я просто попытался @Darsstar «S инструкцию, чтобы перейти к /index.php/street, и это сработало! Но теперь, когда я пытаюсь идти к /index.php/street/derp, я получаю сообщение об ошибке говорящего

Запрошенный URL Derp не был найден на этом сервере.

Так что это не работает должным образом, я предполагаю, что

+0

Правильно ли ваш контроллер (проверьте чувствительность к регистру, правильную папку, правильные методы)? – kero

+0

Спасибо за ваш ответ @kingkero. 'code'Route :: набор ('test1', 'тест/') \t -> по умолчанию (массив ( \t \t 'контроллер' => 'тест', \t \t 'действие' => 'Индекс' , \t)); '/ code' Если у меня есть контрольный контроллер в контроллере карты (так же, как приветствуется) и action_index (как и в приемном контроллере), он должен работать правильно? Но когда я просматриваю ../test, он сообщает мне, что запрошенный ресурс не найден! – Wekslie

+0

Добро пожаловать, но это решило проблему? Если нет, укажите дополнительный код (например, контроллер, к которому вы хотите получить доступ) – kero

ответ

3

Поскольку /index.php/street версия работы идут и читать Clean URLs tutorial, если вы еще не сделали. Если у вас есть, дважды проверьте все!

Если у вас есть только эти два маршрута, в этом порядке /index.php/street/derp должен соответствовать маршруту 'test1'.

Сообщение об ошибке «Запрошенный URL-адрес derp не найден на этом сервере». говорит, что вы отправились в /index.php/derp, а не index.php/street/derp. Который будет соответствовать маршруту по умолчанию и будет отправлен в Controller_Derp :: action_index(), но он не существует, поэтому Request_Internal :: execute() выдает HTTP_Exception_404.

По умолчанию маршрут больше и пример. Это discussion on Kohana's issue tracker, чтобы удалить его, поскольку основной маршрут по умолчанию является плохой практикой. Маршруты должны быть конкретными. Я рекомендую удалить его.

И если вы считаете, что полный маршрут - это хороший способ поймать все 404 запроса, пожалуйста, сообщите Custom Error Pages tutorial.

+0

Большое спасибо за информацию! Я начну читать эту информацию. Я не хочу иметь только два маршрута, но когда я ввожу несуществующий URL-адрес, он должен перенаправить запрос на то, что я выберу, например, некорректную страницу или что-то еще. – Wekslie

+0

Вы так решили? – Darsstar

+0

Пока нет, не пытались это сделать. Но спасибо за помощь! – Wekslie

Смежные вопросы