NAME

Squatting::View - default view class for Squatting

SYNOPSIS

package App::Views;
use Squatting 'views';
our @V = (
  V(
    'html',
    layout => sub {
      my ($self, $v, @content) = @_;
      "(header @content footer)";
    },
    home => sub {
      my ($self, $v) = @_;
      "Hello, $v->{name}";
    },
    _ => sub {
      my ($self, $v) = @_;
      "You tried to render $self->{template} which was not defined.";
    },
    arbitrary_data => [ 'is', 'ok', 2 ],
  )
);

DESCRIPTION

In Squatting, views are objects that contain many templates. Templates are represented by subroutine references that will be installed as methods of a view object. The job of a template is to take a hashref of variables and return a string.

You may also define a special template named "layout" that's expected to also take the output of another template and wrap it.

API

General Methods

Squatting::View->new($name, %methods)

The constructor takes a name and a hash of attributes and coderefs.

$v->name

This returns the name of the view.

Template Methods

$v->$template($v)

Any coderef that was given to the constructor may be called by name. Templates should be passed in a hashref ($v) with variables for it to use to generate the final output.

$v->layout($v, @content)

If you define a template named "layout", it'll be used to wrap the content of all templates whose name do not begin with "_". You can use this feature to provide standard headers and footers for your pages.

$v->_($v)

If you define a template named "_", this will act as a catch-all that can be asked to render anything that wasn't explicitly defined. It's like our version of AUTOLOAD().

NOTE: You can find out what they tried to render by inspecting $self->{template}.

SEE ALSO

Squatting, Squatting::Controller