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
路由,但没有匹配。这是意外行为吗?
当我禁用 submodul
和 proses2
路由名称时,它正在工作。
这是屏幕截图:
如何解决这个问题?
实际上,您已经击中了 bug:/@module/@submodule
优先于 /@module/@proc.ksd
而它不应该。
如果您从 edge repository 下载最新的 base.php
,您的问题应该已解决。
xfra35 答案有望解决您的问题。
但是在我看来,当你有一条路线(在你的例子中 /@module/@submodule
)比另一条路线(/@module/@proc.ksd
)更通用时,它总是会很棘手。理论上引擎应该知道后者比前者更严格。或者前者是稍后声明的,因此如果其他规则无法匹配,则应将其作为最后一个进行匹配。但不一定总是这样。
如果我处在你的位置,我会觉得使用其他解决方案更安全。例如,我会尝试合并 @proses
和 @proses2
规则,方法是将当前由主模块处理的所有操作放入专用子模块中。所以每个模块只有一个 get_index
方法,而所有其他 get_*
方法都在子模块中。你觉得这个想法怎么样?
我的路由代码:
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
路由,但没有匹配。这是意外行为吗?
当我禁用 submodul
和 proses2
路由名称时,它正在工作。
这是屏幕截图:
如何解决这个问题?
实际上,您已经击中了 bug:/@module/@submodule
优先于 /@module/@proc.ksd
而它不应该。
如果您从 edge repository 下载最新的 base.php
,您的问题应该已解决。
xfra35 答案有望解决您的问题。
但是在我看来,当你有一条路线(在你的例子中 /@module/@submodule
)比另一条路线(/@module/@proc.ksd
)更通用时,它总是会很棘手。理论上引擎应该知道后者比前者更严格。或者前者是稍后声明的,因此如果其他规则无法匹配,则应将其作为最后一个进行匹配。但不一定总是这样。
如果我处在你的位置,我会觉得使用其他解决方案更安全。例如,我会尝试合并 @proses
和 @proses2
规则,方法是将当前由主模块处理的所有操作放入专用子模块中。所以每个模块只有一个 get_index
方法,而所有其他 get_*
方法都在子模块中。你觉得这个想法怎么样?