[Catalyst] ACCEPT_CONTEXT not invoked if COMPONENT if present

Peter Shangov pshangov at yahoo.com
Fri May 27 11:22:09 GMT 2011


Hi all,

I need to create a Model class that returns an object that is mostly build during component initialization time, but also has access to the current request. The API will look like this:

  sub my_action {
	my ($self, $c) = @_;
	my $formfu = $c->model('FormFu');
	my $book_form = $formfu->form('book');
	# do stuff with $book_form
  }

The main $formfu object is built during app initialization time - it reads configuration files, builds a bunch of forms and does onther expensive tasks. When $c->model('FormFu') is invoked, I want to add to $formfu information about any query parameters from the current request before returning it, so that I can use it with the forms that are accessed afterwards. I tried something like the following:

  package Catalyst::Model::FormFu;

  use parent 'Catalyst::Model';

  sub COMPONENT {
	# get configuration options for this component,
	# build and cache all forms,
	# and put them into $self
  }

  sub ACCEPT_CONTEXT {
	# get query parameters, add them to $self
	# and return it
  }

  sub form {
	# get the requsted form from the cache, 
	# add info about the current query and return it
  }

However, if there is a 'COMPONENT' or 'new' sub, 'ACCEPT_CONTEXT' never gets called. 

What is the right way to address this problem?

Cheers,

--
Peter




More information about the Catalyst mailing list