Florian Ragwitz
and 1 contributors


CatalystX::Imports::Context - Exports Context Helper Functions




  package MyApp::Controller::Foo;
  use base 'Catalyst::Controller';

  # Export everything minus the 'captures' function. Also load
  # the additional 'Foo' library and a config value
  use CatalystX::Imports
      Context => {
          Default => [qw( :all -captures +Foo )],
          Config  => [qw( model_name )],

  sub list: Local {
      stash( rs => model(model_name)->search_rs );

  sub edit: Local {
          foo      => model(model_name)->find(args[0]),
          list_uri => uri_for(action('list')),



This package represents the base class and export manager for all libraries. The default library can be found under the package name CatalystX::Imports::Context::Default.

The exports will be removed after compiletime. By then, the calls to them in your controller will already be bound to the right code slots by perl. This keeps these functions from being available as methods on your controller object.


You can specify what library parts you want to import into your controller on the use line to CatalystX::Imports:

  use CatalystX::Imports Context => [qw(:all -captures +Foo)];

This would import all functions from the default library CatalystX::Imports::Context::Default, except the captures function. See "Tags" in CatalystX::Imports::Context::Default for all available tags in the default library.

Additionally, it will search and load the Foo library, which would be CatalystX::Imports::Context::Foo. This notation doesn't accept any arguments, so the library specific default symbols will be exported.

If you just want some specific functions imported, you can also specify them explicitly:

  use CatalystX::Imports
      Context => [qw(action uri_for model config stash)];

At last, to be specific about more than one library, you can pass a hash reference:

  use CatalystX::Imports
      Context => { Default => ':all', Config => [qw(model_name)] };

See the libraries documentation for further syntax information.


If documented, you can also import a function with one of it's aliases. If you import a function via a tag, it will only be exported under its real name, not its aliased names. Therefor, to use an aliase you have to specify aliases explicitly at any time to use them:

  # load aliases for short forms of 'request' and 'response'
  use CatalystX::Imports Context => [qw( req res )];



Contains default shortcuts and inline accessors.


Allows you to import local controller (instance) configuration accessors as inline functions into your namespace.



This method registers a new export in the library it's called upon. You will mostly only need this function for creating your own libraries:

  package CatalystX::Imports::Context::MyOwnLibrary;
  use base 'CatalystX::Imports::Context';

      name      => 'double',
      alias     => 'times_two',
      prototype => '$',
      tags      => [qw( math )],
      code      => sub {
          my ($library, $ctrl, $ctx, $action_args, @args) = @_;
          return $args[0] * 2;

The code and name parameters are mandatory. If you specify an alias, it can be imported explicitly, but will not be included in the :all tag.

The prototype is the usual prototpe you could stuff on perl subroutines. If you specify tags as an array reference, the export will be included in those tag sets by it's name and aliases. It will be included in the :all tag in any case, but only under it's name, not it's aliases.

The specified code reference will get the library class name, the controller and context objects (like a Catalyst action), and an array reference of the arguments passed to the last action and then it's own actual arguments passed in. You could call the above with

  double(23); # 46


Returns the libraries export map as a hash reference. This will be stored in your library class (if you build your own, otherwise you don't have to care) in the %CATALYSTX_IMPORTS_EXPORT_MAP package variable.


Expects the name of an export in the library and will return the information it stored with it. An export will be stored under its actual name as well as its aliases.


Called by CatalystX::Imports' import method. Takes a target and a set of commands specified in "IMPORT SYNTAX". This will forward the commands to the actual libraries and the "context_export_into" method in them.


Takes a target and an actual command set for a library (no +Foo stuff) and cleans that (flattens out tags, removes -substractions). It will utilise "context_install_export_into" to actually export the final set of functions.


Takes a target class and the name of an export to install the function in the specified class.


Should be overridden by subclasses if they want to export something by default. This will be used if the library is specified without any arguments at all. E.g. this:

  use CatalystX::Imports Context => [qw( +Foo )];

will export Foo's defaults, but

  use CatalystX::Imports Context => { Foo => [] };

will not. Without an overriding method, the default is set to export nothing at all.


register_export expects key/value pairs as arguments

You passed an odd number of values into the register_export method call, but it expects key and value pairs of named options. See L>/register_export> for available options and calling syntax.

register_export: Missing required parameter: 'foo'

The "register_export" method expects a few parameters that can't be omitted, including foo. Pass in the parameter as specified in the section about the "register_export" method.

Unknown Context tag: ':foo'

You specified to import the functions in the tag :foo on your use line, but no tag with the name :foo was registered in the library.

Unknown Context export: 'foo'

You asked for export of the function foo, but no function under this name was registered in the library. Please consult your library documentation for a list of available exports. The default library can be found under CatalystX::Imports::Context::Default.


Catalyst, Filter::EOF, CatalystX::Imports::Context::Default, CatalystX::Imports::Context::Config, CatalystX::Imports::Vars, CatalystX::Imports


Robert 'phaylon' Sedlacek <rs@474.at>


This program is free software; you can redistribute it and/or modify it under the same terms as perl itself.