Module 科哈纳3条单独模块的路线

Module 科哈纳3条单独模块的路线,module,routes,kohana-3,Module,Routes,Kohana 3,我是科哈纳的新手,但已经阅读用户指南两周了。我正在v3.3.1上构建一个巨大的应用程序,它将有许多不同的模块(即驻留在模块目录中)。我正在努力使路线按我需要的那样发挥作用 首先,值得一提的是,我已经阅读了有关路由、模块、引导等的用户指南。我将route::set放在模块的init.php文件中,因此在bootstrap.php文件中的“default”选项之前调用它。这是我所拥有的 目录: 应用程序>类>控制器>Welcome.php 模块>模块1>类>控制器>Home.php 路线 在modu

我是科哈纳的新手,但已经阅读用户指南两周了。我正在v3.3.1上构建一个巨大的应用程序,它将有许多不同的模块(即驻留在模块目录中)。我正在努力使路线按我需要的那样发挥作用

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

目录:

应用程序>类>控制器>Welcome.php

模块>模块1>类>控制器>Home.php

路线

在module1 init.php文件中:

Route::set('module1', 'module1(/<controller>(/<action>))')
->defaults(array(
    'controller' => 'Home',
    'action'     => 'index',
));
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));
Route::set('module1','module1(/(/)'))
->默认值(数组)(
“控制器”=>“主控制器”,
“操作”=>“索引”,
));
在bootstrap.php文件中:

Route::set('module1', 'module1(/<controller>(/<action>))')
->defaults(array(
    'controller' => 'Home',
    'action'     => 'index',
));
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));
Route::set('default','(/(/))'))
->默认值(数组)(
“控制器”=>“欢迎”,
“操作”=>“索引”,
));
当我转到localhost/index.php/module1/it时,它会运行模块的主控制器

当我转到localhost/index.php时,它会运行应用程序目录中的欢迎控制器

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

我知道这是拾取模块控制器的默认路径,但我不知道如何阻止它这样做,或者即使这是可能的

如果有人有这样使用模块的经验,你能帮助我吗?非常感谢您抽出时间

非常感谢,,
Steve

您使用的是默认路线,这是一条全面覆盖的路线。您应该做的是以这样一种方式更改路由,即您的“一网打尽”仅限于主应用程序中的控制器。这可以通过使用正则表达式添加第三个参数来实现

例如:

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',
));
Route::set('module1','module1(/(/)'))
->默认值(数组)(
“控制器”=>“主控制器”,
“操作”=>“索引”,
));
路由::集合('main-app','(/(/))',
排列(
'控制器'=>'(欢迎|登录|帖子)'
))
->默认值(数组)(
“控制器”=>“欢迎”,
“操作”=>“索引”,
));
如果我是你,我甚至会进一步分解路线,为你的管制员制定具体的路线

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


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

非常感谢Manuras,这是我们的初衷。为了避免使用相同的控制器名称,我正在考虑在任何模块控制器名称前加上模块名称。例如,主应用程序控制器可以称为“欢迎”,模块可以称为“欢迎”。你会推荐这种方法,还是有更好的方法?这是一种很好的方法。我想大多数人都是这样做的。您也可以使用模块控制器文件夹中的目录,但这取决于您。选择你喜欢的。玩了一会儿之后,我选择了使用目录。用模块名作为控制器名的前缀看起来很混乱。我在controller文件夹中创建了一个module1目录,我的模块路由现在看起来像route::set('module1','module1(/(/))'),带有默认的'directory'=>'module1'。工作正常,应能捕获每个模块的所有请求。非常感谢您的帮助。全包路线被认为是不好的,很多特定路线被认为是好的。这就是佐姆多曾经说过的要点,我同意。