在Kohana设置路线

时间:2012-02-05 22:00:48

标签: php model-view-controller kohana

如果我定义了2个控制器,A.php和B.php,并且在每个控制器中我定义了一个索引动作, 我应该如何在bootstrap.php文件中定义Route::set

3 个答案:

答案 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;。 然后默认路由应该没问题。