Строго пустое приложение URI в Кохане по маршруту - PullRequest
0 голосов
/ 12 ноября 2011


Я пытаюсь сделать правило маршрута, чтобы сделать мой запрос на главной странице в Kohana. Это что-то вроде этого: http://my_site/
И попал в беду здесь. В документах пишут, что я могу сделать то или иное, множество вариантов, но для моего примера нет. Проще говоря, если я попытаюсь сделать это

Route::set('main/index', '')
    ->defaults(array(
        'controller' => 'main',
        'action'     => 'index',
    ));

тогда, если я напишу Route :: get ('main / index') -> uri () на странице http://my_site/hi, я получу ссылку на ту же страницу. Если я сделаю это так

Route::set('main/index', null)
    ->defaults(array(
        'controller' => 'main',
        'action'     => 'index',
    ));

Снова нет результата, обратный вызов uri должен иметь допустимое значение.
В официальном руководстве они предлагают этот вариант

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

Но мне нужно правило со строгим соответствием, т. Е. Просто http://my_site/,, а не http://my_site/(<controller>(/<action>(/<id>)))
Есть ли способ выручить меня без переписывания класса Route?
Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011
Route::set('main/index', '')
    ->defaults(array(
        'controller' => 'main',
        'action'     => 'index',
    ));

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

Если вы хотите знать, что, если ваш маршрут соответствует (на сервере разработки), вы можете установить контроллер по умолчанию на несуществующий, такой как «фиктивный».Затем Kohana выдаст Http_Exception_404, и обработчик исключений предоставит вам страницу с ошибкой.(Включите ошибки kohana, если это не так.) На этой странице щелкните ссылку «arguments» первой трассировки трассировки стека.Затем вы должны увидеть что-то вроде следующего:

object Request(18) {
    ...snip...
    protected _route => object Route(5) {
        protected _callback => NULL
        protected _uri => string(0) ""
        protected _regex => array(0) 
        protected _defaults => array(1) (
            "controller" => string(5) "bogus" // the non-existing bogus controller default
        )
        protected _route_regex => string(6) "#^$#uD"
    }
    ...snip...
}

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

Route::set('main/index', '')
    ->defaults(array(
        'controller' => 'bogus',
    ));

Также убедитесь, что никакой другой маршрут не использует имя «main / index», так как оно перезапишет старое.На самом деле, я просто взглянул на код Route :: uri () и угадаю, что.Статические маршруты (маршруты без '<' или '(' в них) должны возвращать текущий URL. Так как пустая строка является статическим маршрутом, результатом Route :: uri этого маршрута всегда будет только хост. Что подсказывает мнеВы переопределяете маршрут 'main / index', предполагая, что для uri была задана пустая строка. </p>

Кроме того, при использовании NULL в качестве uri для маршрута предполагается, что он получен из кэша, и вы в итоге получаетепустой маршрут, когда он не пришел из кеша.

1 голос
/ 14 ноября 2011

Ваш Route::get('main/index')->uri() возвращает относительный URI, который в этом случае будет пустой строкой. Вы хотите использовать метод url класса Route: Route::url('main/index'). Это даст вам URL, который также прошел через Url::site.

...