
Squatting::View - default view class for Squatting

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 ],
)
);

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.

The constructor takes a name and a hash of attributes and coderefs. Note that the name must be unique within the package the view is defined.
This returns the name of the view.
This returns a hashref of the outgoing HTTP headers.
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.
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.
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}.
