我是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
时运行模块控制器我知道这是获取模块控制器的默认路由,但我不知道如何阻止它执行此操作,或者即使有可能!
如果有人有这种方式使用模块的经验,请帮助我吗?非常感谢你的时间。
非常感谢, 史蒂夫
答案 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将始终覆盖并使用主应用控制器(由于级联文件系统),即使路由与模块控制器匹配。
我希望这会有所帮助,如果您有其他问题,请发表评论。