我正在尝试制定路线规则,以便向kohana的主页面发出请求。这是这样的:http://my_site/
并在这里陷入困境。在他们写的文档中,我可以制作这个或那个,很多变体,但我没有例子。简单地说我是否尝试这样做
Route::set('main/index', '')
->defaults(array(
'controller' => 'main',
'action' => 'index',
));
然后如果我在页面http://my_site/hi上写Route :: get('main / index') - > uri(),我会得到一个指向同一页面的链接。如果我这样做的话
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类的情况下帮助我解决这个问题?
提前致谢
答案 0 :(得分:2)
Route::set('main/index', '')
->defaults(array(
'controller' => 'main',
'action' => 'index',
));
如果我确保在可能与空uri匹配的任何其他路线之前设置路线,则仅适用于我。将按照添加顺序检查路由是否匹配。
如果您想知道路由是否匹配(在开发服务器上),您可以将默认控制器设置为不存在的控制器,如'bogus'。然后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()的代码并猜测了什么。静态路由(没有'&lt;'或'('在其中)的路由应返回当前url。由于空字符串是静态路由,因此该路由的结果Route :: uri将始终只是主机。这表明假设uri被设置为空字符串,则覆盖'main / index'路径。
当使用NULL作为路径的uri时,假设它来自缓存,当它不是来自缓存时,你最终会得到一条空路线。
答案 1 :(得分:1)
你的Route::get('main/index')->uri()
返回一个相对的uri,在这种情况下是一个空字符串。您要执行的操作是使用url
类的Route
方法:Route::url('main/index')
。这将为您提供经过Url::site
的网址。