0

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

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

目录:

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

模块 > 模块 1 > 类 > 控制器 > 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时运行模块控制器

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

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

非常感谢,史蒂夫

4

1 回答 1

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 将始终覆盖并使用主应用控制器(由于级联文件系统),即使路由与模块控制器匹配。

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

于 2013-10-22T13:51:23.883 回答