2013-03-20 62 views
3

我该如何定义一条路线来接收所有请求并将它们转发给一个特定的控制器?我已经尝试添加默认路由Kohana 3.3全接触路线

Route::set('default', '(<controller>(/<action>(/<id>)))') 
    ->defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

Route::set('default', '(.*)') 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

bootstrap.php中,但它不工作。键入本地主机/一后,我得到任何

Unable to find a route to match the URI: a 

The requested URL a was not found on this server. 

错误。我敢肯定控制器是有效的,因为

Route::set('foobar', 'foo') 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

工作正常。

我正在使用Kohana 3.3。

+0

为什么要这么做?这将击败kohana的MVC的目的 – ITroubs 2013-03-20 19:06:07

+0

我试图创建一个网站建设服务,我想将所有非管理网站存储在数据库中,并在需要时加载它们。这些网站将被动态地添加(我不能硬编码路由);我不希望它们仅通过localhost/index.php?id = 7可用,而是通过localhost/siteName。控制器基本上会为每个站点执行相同的操作 - 加载标题,元标记,内容等。然而,管理站点通常是路由的,但我需要一些东西来访问普通文档。 – Mateusz 2013-03-20 19:22:23

+0

我希望我的回答有帮助 – ITroubs 2013-03-20 19:35:49

回答

6

这应该工作:

Route::set('foobar', '<catcher>',array('catcher'=>'.*')) 
    -> defaults(array(
     'directory' => 'site', 
     'controller' => 'foobar', 
     'action' => 'foobar', 
)); 

<catcher>是一个占位符和array('catcher'=>'.*')定义捕手相匹配的正则表达式.*

+0

这正是我所寻找的,而非你的! – Mateusz 2013-03-20 19:38:56

+0

将第三个参数留为NULL仍然会匹配所有内容并跳过一些正则表达式处理。要获取被捕获的路由,使用'Request :: current() - > param('catcher');' – 2014-06-03 21:27:25