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