use Template;
use Template::Timer;
use MRO::Compat;
+use Scalar::Util qw/blessed/;
-our $VERSION = '0.33';
+our $VERSION = '0.34';
__PACKAGE__->mk_accessors('template');
__PACKAGE__->mk_accessors('include_path');
local $@;
my $output = eval { $self->render($c, $template) };
if (my $err = $@) {
- my $error = qq/Couldn't render template "$template"/;
- $c->log->error($error);
- $c->error($error);
- return 0;
+ return $self->_rendering_error($c, $err);
+ }
+ if (blessed($output) && $output->isa('Template::Exception')) {
+ $self->_rendering_error($c, $output);
}
unless ( $c->response->content_type ) {
return 1;
}
+sub _rendering_error {
+ my ($self, $c, $err) = @_;
+ my $error = qq/Couldn't render template "$err"/;
+ $c->log->error($error);
+ $c->error($error);
+ return 0;
+}
+
sub render {
my ($self, $c, $template, $args) = @_;
die $self->template->error if $self->{render_die};
return $self->template->error;
}
- require Carp;
- Carp::carp('The Catalyst::View::TT render() method of will die on error in a future release. If you want it to continue to return the exception instead, pass render_die => 0 to the constructor');
+ $c->log->debug('The Catalyst::View::TT render() method will start dying on error in a future release. Unless you are calling the render() method manually, you probably want the new behaviour, so set render_die => 1 in config for ' . blessed($self) . '. If you wish to continue to return the exception rather than throwing it, add render_die => 0 to your config.') if $c->debug;
return $self->template->error;
}
return $output;
Renders the given template and returns output. Throws a L<Template::Exception>
object upon error.
-The template variables are set to C<%$args> if $args is a hashref, or
-$C<< $c->stash >> otherwise. In either case the variables are augmented with
-C<base> set to C< << $c->req->base >>, C<c> to C<$c> and C<name> to
+The template variables are set to C<%$args> if C<$args> is a hashref, or
+C<< $c->stash >> otherwise. In either case the variables are augmented with
+C<base> set to C<< $c->req->base >>, C<c> to C<$c>, and C<name> to
C<< $c->config->{name} >>. Alternately, the C<CATALYST_VAR> configuration item
can be defined to specify the name of a template variable through which the
-context reference (C<$c>) can be accessed. In this case, the C<c>, C<base> and
+context reference (C<$c>) can be accessed. In this case, the C<c>, C<base>, and
C<name> variables are omitted.
C<$template> can be anything that Template::process understands how to