如果我定义了2个控制器,A.php和B.php,并且在每个控制器中我定义了一个索引动作,
我应该如何在bootstrap.php文件中定义Route::set
?
答案 0 :(得分:3)
默认路线应该没问题:
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
请阅读文档:http://kohanaframework.org/3.2/guide/kohana/routing
该默认路由将匹配控制器'/ a'和控制器'/ b',如果URI中未指定其他操作,则执行索引操作。
答案 1 :(得分:2)
我已经阅读了文档,并且不清楚何时以及为什么要创建Route条目。
基本上,如果您的URL不符合普通/控制器/操作结构,则需要Route条目。如果您使用索引操作创建了控制器A和控制器B,则如果您总是要使用标准URL语法访问这些操作,则无需向bootstrap.php添加路由:
http://www.example.com/A/index
http://www.example.com/B/index
如果没有指定,则可以不使用“index”,因为它是默认操作。
假设您希望控制器A成为默认站点控制器,这意味着您不希望在URL中使用A,您希望在域之后立即使用该操作:
http://www.example.com/index
然后你需要一条路线来告诉Kohana你所创建的任何路线都没有匹配的任何URL(或者你没有路由)应该由你的默认路由处理。您将在bootstrap.php中创建此路由:
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'A',
'action' => 'index'
));
这表示如果用户转到http://www.example.com,Kohana将使用控制器A的索引操作。如果用户转到http://www.example.com/foo,则Kohana将使用控制器A的foo动作。与任何其他控制器不匹配的URL将转到A控制器。如果用户请求A不处理的操作,他将获得404异常。
您仍然拥有B控制器,因此无需任何路线即可正常工作。如果用户转到http://www.example.com/B/index,Kohana知道应用程序中的B控制器,那么它将转到那里的索引操作。
答案 2 :(得分:0)
您的问题可能出在kohana文件夹中的.htaccess文件中。 我需要改变&#34; RewriteBase&#34;到Kohana文件夹(&#39; base_url&#39;来自Kohana :: init in bootstrap.php文件),否则我登陆了'404' - 找不到任何对象&#39;。 然后默认路由应该没问题。