1

我的 Kohana 3.2 项目中有多个控制器,其中最初的路由:

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

它适用于我所有的新控制器(当我添加一个新文件并转到:域/控制器时,它就像一个魅力。

现在对于一个名为 parents 的特定控制器,我必须在我的引导程序中添加新行:

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

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

我试图同时访问:/parents//parent/index/id并且在没有Route::set到位时都产生了错误。

如果没有这些行,我总是会遇到以下错误:

无法找到匹配 uri 的路线

或者

请求的路由不存在

我该怎么做?对于我添加的每个控制器,我是否需要在我的引导程序中定义它?

4

2 回答 2

1

我最好为所有这些使用一条路线:

Route::set('p', '(<controller>(/<action>(/<id>)))')

->defaults(array(
'action'     => 'index',
));

如果你打电话/parents/father- 你去parents控制器,如果你打电话,/parent/father你去parent

于 2012-04-18T06:44:51.620 回答
1

实际上,在您的情况下,您只需要使用默认路由即可。

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

首先,Kohana 尝试匹配您的正则表达式模式 [((/(/)))]。这将匹配 url:用户、用户/删除、用户/删除/1、父母、父母/视图、父母/视图/2 等。

如果 Kohana 无法找到该操作,它将默认根据您的默认数组规则进行索引。如果 Kohana 无法找到控制器(这基本上意味着没有通过),那么它将使用控制器。在最后一种情况下,它也会默认操作,因为我们无法在不传递正则表达式中的控制器的情况下传递操作(请参阅括号首先需要控制器,然后是操作,然后是 id)。

因此,以下示例将通过此默认模式进行路由:

 URL: /users  
 Controller: users  
 Action: index (picked default)  

 URL: /users/kill/1  
 Controller: users    
 Action: kill
 Id: 1

 URL: /parents  
 Controller: parents  
 Action: index (picked default)    

 URL: /parent/view
 Controller: parent  
 Action: view  

最佳做法是将此路由保留为应用的最后一个路由(基本上是默认路由并捕获所有路由),如果您的 url 与默认模式不匹配,请添加它们。

于 2012-04-20T04:23:40.653 回答