Mojolicious - 如何在控制器方法处理和呈现之前拦截传入请求
Mojolicious - how to intercept the incoming request before controller method handles and renders
在 Mojolicious 应用程序中,我需要确定哪个控制器方法将处理传入请求,以便我可以记录远程客户端的详细信息并添加一些逻辑。我只想在一个地方做,而不是在每个控制器方法中做。我已经尝试了一些 HOOKS 但无法弄清楚。非常感谢对此的任何帮助。
OAuth 的 OpenApi Plugin files and also use Oauth2 Plugin 个路由 generated/created。
- 有趣的细节:
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)
我在 mojolicious mailing list 中提问,得到了 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
...
}
);
...
}
DDP - 输出
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"
}
]
}
]
}
}
这是我在 $c->match->stack
中寻找的信息:
action "controller_method_name",
controller "ControllerClassName",
在 Mojolicious 应用程序中,我需要确定哪个控制器方法将处理传入请求,以便我可以记录远程客户端的详细信息并添加一些逻辑。我只想在一个地方做,而不是在每个控制器方法中做。我已经尝试了一些 HOOKS 但无法弄清楚。非常感谢对此的任何帮助。
OAuth 的 OpenApi Plugin files and also use Oauth2 Plugin 个路由 generated/created。
- 有趣的细节:
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)
我在 mojolicious mailing list 中提问,得到了 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
...
}
);
...
}
DDP - 输出
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"
}
]
}
]
}
}
这是我在 $c->match->stack
中寻找的信息:
action "controller_method_name",
controller "ControllerClassName",