1Catalyst::Component::CoUnsteerxtCColnotsruirbeu(t3e)d PeCraltaDloycsutm:e:nCtoamtpioonnent::ContextClosure(3)
2
3
4

NAME

6       Catalyst::Component::ContextClosure - Moose Role for components which
7       need to close over the $ctx, without leaking
8

SYNOPSIS

10           package MyApp::Controller::Foo;
11           use Moose;
12           use namespace::clean -except => 'meta';
13           BEGIN {
14               extends 'Catalyst::Controller';
15               with 'Catalyst::Component::ContextClosure';
16           }
17
18           sub some_action : Local {
19               my ($self, $ctx) = @_;
20               $ctx->stash(a_closure => $self->make_context_closure(sub {
21                   my ($ctx) = @_;
22                   $ctx->response->body('body set from closure');
23               }, $ctx));
24           }
25

DESCRIPTION

27       A common problem with stashing a closure, that closes over the Catalyst
28       context (often called $ctx or $c), is the circular reference it
29       creates, as the closure holds onto a reference to context, and the
30       context holds a reference to the closure in its stash. This creates a
31       memory leak, unless you always carefully weaken the closures context
32       reference.
33
34       This role provides a convenience method to create closures, that closes
35       over $ctx.
36

METHODS

38   make_context_closure ($closure, $ctx)
39       Returns a code reference, that will invoke $closure with a weakened
40       reference to $ctx. All other parameters to the returned code reference
41       will be passed along to $closure.
42

SEE ALSO

44       Catalyst::Component
45
46       Catalyst::Controller
47
48       CatalystX::LeakChecker
49
51       This library is free software. You can redistribute it and/or modify it
52       under the same terms as Perl itself.
53
54
55
56perl v5.36.0                      2022-07C-a3t1alyst::Component::ContextClosure(3)
Impressum