NAME

Catalyst::View::Template::Lace - Catalyst View Adaptor for Template::Lace

SYNOPSIS

Define a View:

package  MyApp::View::User;

use Moo;
extends 'Catalyst::View::Template::Lace';
with 'Template::Lace::ModelRole';

has [qw/age name motto/] => (is=>'ro', required=>1);

sub template {q[
  <html>
    <head>
      <title>User Info</title>
    </head>
    <body>
      <dl id='user'>
        <dt>Name</dt>
        <dd id='name'>NAME</dd>
        <dt>Age</dt>
        <dd id='age'>AGE</dd>
        <dt>Motto</dt>
        <dd id='motto'>MOTTO</dd>
      </dl>
    </body>
  </html>
]}

sub process_dom {
  my ($self, $dom) = @_;
  $dom->dl('#user', +{
   age=>$self->age,
   name=>$self->name,
   motto=>$self->motto});
}

1;

Used in a controller:

package MyApp::Controller::User;

use Moose;
use MooseX::MethodAttributes;
extends 'Catalyst::Controller';

sub display :Path('') {
  my ($self, $c) = @_;
  $c->view('User',
    name => 'John',
    age => 42,
    motto => 'Why Not?')
  ->http_ok;
}

__PACKAGE__->meta->make_immutable;

DESCRIPTION

NOTE I consider this an early access release. Code and API here is subject to significant change as needed to advance the project. Please don't use this in production unless you are willing to cope with that.

Catalyst::View::Template::Lace is a view adaptor for Template::Lace with some Catalyst specific helpers and features added. Reviewing documentation for Template::Lace would useful in furthering your ability to use it in Catalyst.

In short, this is a template framework for Catalyst that introduces strongly typed views and view components as design patterns for your web applications. What this means is that unlike most Catalyst views that you're probably familiar with (such as the Template::Toolkit view) we define one view per template instead of one view for all the templates. Although this might seem like a lot of views to write the upside is by defining a strong interface for your view, you eliminate a host of display errors that I commonly see in the wild since there is no contract beween a view and the controller that is calling it. Also since each component in your view has access to the Catalyst context, you can write smarter views with display logic properly encapsulated near the template code it will actually be used. This reduces complexity in your controllers and makes it easier to solve complex layout logic.

After reviewing these documentation you can advance to Catalyst::View::Template::Lace::Tutorial and you might find the test cases in the /t directory of this distribution handy as well.

NOTE I consider current documentation to be the 'thin red line' requirement for CPAN publication but there's tons more to be done. Critique and contributions very welcomed!.

CONFIGURATION

This component defines the following configuration options:

factory

These specifies which subclass of Template::Lace::Factory will be used to manage your view lifecycle. The default is Catalyst::View::Template::Lace::Factory. You can also specify Catalyst::View::Template::Lace::PerContext or write your own. See documentation for the two options for more.

model_class

render_class

init_args

model_constructor

component_handlers

All these are pass through configuration to the underlying subclass of Template::Lace::Factory which you should review.

AUTHOR

John Napiorkowski email:jjnapiork@cpan.org

SEE ALSO

Template::Lace, Catalyst::View::Template::Pure

COPYRIGHT & LICENSE

Copyright 2017, John Napiorkowski email:jjnapiork@cpan.org

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