Kohana 3个人模块路线

时间:2013-10-22 11:32:04

标签: module routes kohana-3

我是Kohana的新手,但现在已经阅读了用户指南大约两周了。我正在v3.3.1上构建一个巨大的应用程序,它将有许多不同的模块(即驻留在modules目录中)。我正在努力让路线上班,因为我需要它们。

首先,值得一提的是我已阅读有关路由,模块,引导等的用户指南。我将route :: set放在模块内的init.php文件中,因此在“默认”之前调用它“bootstrap.php文件中的选项。这就是我的......

目录:

应用程序>课程>控制器>的welcome.php

模块> module1>课程>控制器> Home.php

路线

在module1 init.php文件中:

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

在bootstrap.php文件中:

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

当我转到localhost / index.php / module1 /时,确实运行模块的Home控制器。

当我转到localhost / index.php时,在应用程序目录中运行Welcome控制器。

但是,如果我转到localhost / index.php / home,它还会运行模块的Home控制器。我不希望它这样做。我只希望在URI为localhost / index.php / module1 / controller

时运行模块控制器

我知道这是获取模块控制器的默认路由,但我不知道如何阻止它执行此操作,或者即使有可能!

如果有人有这种方式使用模块的经验,请帮助我吗?非常感谢你的时间。

非常感谢, 史蒂夫

1 个答案:

答案 0 :(得分:2)

您正在使用默认路由,这是一个捕获所有路由。你应该做的是改变路线,使你的捕获全部仅限于主应用程序中的控制器。这可以通过使用正则表达式添加第三个参数来完成。

示例:

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


Route::set('main-app', '(<controller>(/<action>(/<id>)))', 
array(
    'controller' => '(welcome|login|posts)'
))
->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));

如果我是你,我甚至会进一步分解路线并为你的控制器制定特定路线。

但请注意,您不能在主应用程序和模块中使用相同的控制器名称。使用这些路径(可能全部),Kohana将始终覆盖并使用主应用控制器(由于级联文件系统),即使路由与模块控制器匹配。

我希望这会有所帮助,如果您有其他问题,请发表评论。