package HTML::FormHandler::Render::WithTT; # ABSTRACT: tt rendering $HTML::FormHandler::Render::WithTT::VERSION = '0.40068'; use Moose::Role; use File::ShareDir; use Template; use namespace::autoclean; use HTML::FormHandler::Render::Util ('process_attrs'); has 'tt_include_path' => ( traits => ['Array'], is => 'rw', isa => 'ArrayRef', lazy => 1, builder => 'build_tt_include_path', handles => { add_tt_include_path => 'push', } ); sub build_tt_include_path {[]} has 'tt_config' => ( traits => ['Hash'], is => 'rw', lazy => 1, builder => 'build_tt_config', ); sub build_tt_config { my $self = shift; return { INCLUDE_PATH => [ @{ $self->tt_include_path }, File::ShareDir::dist_dir('HTML-FormHandler') . '/templates/' ] }; } # either file name string or string ref? has 'tt_template' => ( is => 'rw', isa => 'Str', lazy => 1, builder => 'build_tt_template' ); sub build_tt_template { 'form/form.tt' } has 'tt_engine' => ( is => 'rw', isa => 'Template', lazy => 1, builder => 'build_tt_engine' ); sub build_tt_engine { my $self = shift; my $tt_engine = Template->new( $self->tt_config ); return $tt_engine; } has 'tt_vars' => ( is => 'rw', traits => ['Hash'], builder => 'build_tt_vars'); sub build_tt_vars {{}} has 'default_tt_vars' => ( is => 'ro', isa => 'HashRef', lazy => 1, builder => 'build_default_tt_vars' ); sub build_default_tt_vars { my $self = shift; return { form => $self->form, process_attrs => \&process_attrs }; } has 'tt_default_options' => ( traits => ['Hash'], is => 'rw', isa => 'HashRef', lazy => 1, builder => 'build_tt_default_options', ); sub build_tt_default_options {{}} sub tt_render { my $self = shift; my $output; my $vars = { %{$self->default_tt_vars}, %{$self->tt_vars} }; $self->tt_engine->process( $self->tt_template, $vars, \$output ); if( my $exception = $self->tt_engine->{SERVICE}->{_ERROR} ) { die $exception->[0] . " " . $exception->[1] . ". So far => " . ${$exception->[2]} . "\n"; } return $output; } 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormHandler::Render::WithTT - tt rendering =head1 VERSION version 0.40068 =head1 SYNOPSIS A rendering role for HTML::FormHandler that allows rendering using Template::Toolkit package MyApp::Form; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; with 'HTML::FormHandler::Render::WithTT'; sub build_tt_template { 'user_form.tt' } sub build_tt_include_path { ['root/templates'] } ....< define form >.... my $form = MyApp::Form->new( $form->tt_render; If you want to render with TT, you don't need this role. Just use one of the TT form templates provided, form.tt or form_in_one.tt. If you use this role to render, you are using two different TT engines, with different sets of variables, etc, which doesn't make much sense. This is mainly useful as a testing aid and an example of using the sample templates. =head1 DESCRIPTION Uses 'tt_render' instead of 'render' to allow using both TT templates and the built-in rendering. =head1 AUTHOR FormHandler Contributors - see HTML::FormHandler =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut