Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Catalyst::Component::CUserxContributed PCatalyst::Component::ContextClosure(3)

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

SYNOPSIS
	   package MyApp::Controller::Foo;
	   use Moose;
	   use namespace::clean	-except	=> 'meta';
	   BEGIN {
	       extends 'Catalyst::Controller';
	       with 'Catalyst::Component::ContextClosure';
	   }

	   sub some_action : Local {
	       my ($self, $ctx)	= @_;
	       $ctx->stash(a_closure =>	$self->make_context_closure(sub	{
		   my ($ctx) = @_;
		   $ctx->response->body('body set from closure');
	       }, $ctx));
	   }

DESCRIPTION
       A common	problem	with stashing a	closure, that closes over the Catalyst
       context (often called $ctx or $c), is the circular reference it
       creates,	as the closure holds onto a reference to context, and the
       context holds a reference to the	closure	in its stash. This creates a
       memory leak, unless you always carefully	weaken the closures context
       reference.

       This role provides a convenience	method to create closures, that	closes
       over $ctx.

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

SEE ALSO
       Catalyst::Component

       Catalyst::Controller

       CatalystX::LeakChecker

COPYRIGHT
       This library is free software. You can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.32.1			  2020-0Catalyst::Component::ContextClosure(3)

NAME | SYNOPSIS | DESCRIPTION | METHODS | SEE ALSO | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Catalyst::Component::ContextClosure&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help