Fat Free Framework 路由系统导致意外行为

Fat Free Framework Routing System causes unexpected behavior

我的路由代码:

F3::route('GET  @root: /', "\Controller\_App\App_navigation->get_delegator");

F3::route('GET  @modul: /@module', "\Controller\@module->get_index");
F3::route('POST @modul',           "\Controller\@module->post_index");
F3::route('GET  @proses: /@module/@proc.ksd', "\Controller\@module->get_@proc");
F3::route('POST @proses',                     "\Controller\@module->post_@proc");


F3::route('GET  @submodul: /@module/@submodule', "\Controller\@module\@submodule->get_index");
F3::route('POST @submodul',                      "\Controller\@module\@submodule->post_index");

F3::route('GET  @proses2: /@module/@submodule/@proc.ksd', "\Controller\@module\@submodule->get_@proc");
F3::route('POST @proses2',                                "\Controller\@module\@submodule->post_@proc");

我试图访问 proses 路由,但没有匹配。这是意外行为吗?

当我禁用 submodulproses2 路由名称时,它正在工作。

这是屏幕截图:

如何解决这个问题?

实际上,您已经击中了 bug/@module/@submodule 优先于 /@module/@proc.ksd 而它不应该。

如果您从 edge repository 下载最新的 base.php,您的问题应该已解决。

xfra35 答案有望解决您的问题。

但是在我看来,当你有一条路线(在你的例子中 /@module/@submodule)比另一条路线(/@module/@proc.ksd)更通用时,它总是会很棘手。理论上引擎应该知道后者比前者更严格。或者前者是稍后声明的,因此如果其他规则无法匹配,则应将其作为最后一个进行匹配。但不一定总是这样。

如果我处在你的位置,我会觉得使用其他解决方案更安全。例如,我会尝试合并 @proses@proses2 规则,方法是将当前由主模块处理的所有操作放入专用子模块中。所以每个模块只有一个 get_index 方法,而所有其他 get_* 方法都在子模块中。你觉得这个想法怎么样?