
Squatting::View - default view class for Squatting

package App::Views;
use Squatting 'views';
our @V = (
V(
'example',
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 coderefs that will be treated as methods of a view object. The job of a template is to take a hashref of variables and return a string.
Typically, the hashref of variables will be the same as what's in $controller->v. This is important to note, because if you want a session variable in $controller->state to affect the template, you have to put it in $controller->v.

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}.
You are allowed to directly replace the template coderefs with your own. The most common reason you'd do this would be to replace an app's default layout with your own.
$view->{layout} = sub {
my ($self, $v, $content) = @_;
# ...
};
