我有一个大型的Catalyst应用程序,并希望获得它支持的所有端点的列表(如果它能告诉我请求方法,会得到加分)。有没有简单的方法让Catalyst列出它们?
x9ybnkn61#
Catalyst不知道完整的路径集。真正的调度路径是动态解析的,迭代DispatchType类,直到对match的调用做出有利的响应。debug选项一次性枚举控制器允许的所有可能性。这是一个遍历树的算法,它遍历在'/'找到的每个路由,并跟踪$controller->actions返回的每个后续路由。它不容易阅读,但你可以想象实现一个版本的_display_action_tables,它不只是打印到一个表,而是做其他事情。然后在实时应用程序中以$c为参数调用它,看看会发生什么!
match
$controller->actions
6ljaweal2#
可以使用Catalyst::Plugin::ActionPaths。https://www.perl.com/article/inspecting-catalyst/中有一篇文章展示了如何编写脚本来列出操作的示例。使用Catalyst Context,您可以执行所有操作:
my $actions = $c->get_action_paths; foreach $action (@$actions) { print $action->{path}; }
2条答案
按热度按时间x9ybnkn61#
Catalyst不知道完整的路径集。真正的调度路径是动态解析的,迭代DispatchType类,直到对
match
的调用做出有利的响应。debug选项一次性枚举控制器允许的所有可能性。
这是一个遍历树的算法,它遍历在'/'找到的每个路由,并跟踪
$controller->actions
返回的每个后续路由。它不容易阅读,但你可以想象实现一个版本的_display_action_tables,它不只是打印到一个表,而是做其他事情。然后在实时应用程序中以$c为参数调用它,看看会发生什么!6ljaweal2#
可以使用Catalyst::Plugin::ActionPaths。
https://www.perl.com/article/inspecting-catalyst/中有一篇文章展示了如何编写脚本来列出操作的示例。
使用Catalyst Context,您可以执行所有操作: