在 Mojolicious 应用程序中,我需要弄清楚哪个控制器方法将处理传入的请求,以便我可以记录远程客户端的详细信息并添加一些逻辑。我只想在一个地方而不是在每个控制器方法中都这样做。我尝试了一些HOOKS,但无法弄清楚。非常感谢这方面的任何帮助。
路由是从几个OpenApi 插件文件生成/创建的,并且还使用Oauth2 插件进行 OAuth。
CORE
Perl (v5.16.3, linux)
Mojolicious (8.22, Supervillain)
OPTIONAL
Cpanel::JSON::XS 4.04+ (n/a)
EV 4.0+ (4.22)
IO::Socket::Socks 0.64+ (n/a)
IO::Socket::SSL 2.009+ (2.060)
Net::DNS::Native 0.15+ (n/a)
Role::Tiny 2.000001+ (2.000005)
Run Code Online (Sandbox Code Playgroud)
我在mojolicious 邮件列表中询问并得到了 Mojolicious 的创建者 Sebastian Riedel 的回复。谢谢。
为了大家的利益。$c->match->stack
钩子中around_action
有我正在寻找的信息。
在您的应用程序startup
方法中:
sub startup {
my $self = shift;
...
$self->hook(
around_action => sub {
my ($next, $c, $action, $last) = @_;
use DDP;
p $c->match;
# prints all the info about the controller and the method/action
# it is going to call
...
}
);
...
}
Run Code Online (Sandbox Code Playgroud)
Mojolicious::Routes::Match {
Parents Mojo::Base
public methods (7) : endpoint, find, has, path_for, position, root, stack
private methods (1) : _match
internals: {
endpoint Mojolicious::Routes::Route,
position 0,
root Mojolicious::Routes,
stack [
[0] {
action "controller_method_name",
controller "ControllerClassName",
handler "openapi",
id 3336,
openapi.object Mojolicious::Plugin::OpenAPI,
openapi.op_path [
[0] "paths",
[1] "/api/endpoint/path/{id}/status",
[2] "get"
],
openapi.parameters [
[0] {
description "job id",
in "path",
name "id",
required JSON::PP::Boolean,
type "number"
}
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
$c->match->stack
: action "controller_method_name",
controller "ControllerClassName",
Run Code Online (Sandbox Code Playgroud)