use Moose::Role;
use Carp qw/croak/;
+use Catalyst::Utils ();
use namespace::clean -except => 'meta';
with 'Catalyst::Component::ContextClosure';
sub _subinclude_using {
my ($self, $c, $plugin, @args) = @_;
$plugin = $self->_subinclude_plugin_class_name($plugin);
- $plugin->generate_subinclude( $c, @args );
+ my $plugin_config = Catalyst::Utils::merge_hashes($self->config->{subinclude}->{ALL}||{}, $self->config->{subinclude}->{$plugin}||{});
+ $plugin->generate_subinclude( $plugin_config, $c, @args );
}
sub _subinclude_plugin_class_name {
=cut
sub generate_subinclude {
- my ($class, $c, $path, @params) = @_;
+ my ($class, $config, $c, $path, @params) = @_;
my $uri = $c->uri_for_action( $path, @params );
=cut
sub generate_subinclude {
- my ($class, $c, $path, @params) = @_;
- my $stash = {};
+ my ($class, $config, $c, $path, @params) = @_;
+ my $stash = $config->{keep_stash} ? { %{ $c->stash } } : {};
croak "subincludes through subrequests require Catalyst::Plugin::SubRequest"
unless $c->can('sub_request');
=cut
sub generate_subinclude {
- my ($class, $c, $path, @params) = @_;
+ my ($class, $config, $c, $path, @params) = @_;
croak "subincludes through visit() require Catalyst version 5.71000 or newer"
unless $c->can('visit');
{
- local $c->{stash} = {};
+ local $c->{stash} = $config->{keep_stash} ? $c->{stash} : {};
local $c->request->{parameters} =
ref $params[-1] eq 'HASH' ? pop @params : {};