Catalyst-View-JSON-PerRequest
view release on metacpan or search on metacpan
README.mkdn view on Meta::CPAN
# NAME
Catalyst::View::JSON::PerRequest - JSON View that owns its data
# SYNOPSIS
MyApp->inject_components(
'View::JSON' => { from_component => 'Catalyst::View::JSON::PerRequest' }
);
# In a controller...
sub root :Chained(/) CaptureArgs(0) {
my ($self, $c) = @_;
$c->view('JSON')->data->set(z=>1);
}
sub midpoint :Chained(root) CaptureArgs(0) {
my ($self, $c) = @_;
$c->view('JSON')->data->set(y=>1);
}
sub endpoint :Chained(midpoint) Args(0) {
my ($self, $c) = @_;
$c->view('JSON')->send_created({
a => 1,
b => 2,
c => 3,
});
}
# DESCRIPTION
This is a [Catalyst::View](https://metacpan.org/pod/Catalyst::View) that produces JSON response from a given model.
It differs from some of the more classic JSON producing views (such as
[Catalyst::View::JSON](https://metacpan.org/pod/Catalyst::View::JSON) in that is is a per request view (one view for each
request) and it defines a 'data' method to hold information to use to produce
a view.
It also generates some local response helpers. You may or may not find this
approach leads to cleaner code.
# METHODS
This view defines the following methods
## data (?$model)
Used to set the view data model, and/or to called methods on it (for example
to set attributes that will later be used in the JSON response.).
The default is an injected model based on [Catalyst::Model::JSON::ViewData](https://metacpan.org/pod/Catalyst::Model::JSON::ViewData)
which you should review for basic usage. I recommend setting it to a custom
model that better encapsulates your view data. You may use any model in your
[Catalyst](https://metacpan.org/pod/Catalyst) application as long as it does the method "TO\_JSON".
You may only set the view data model once. If you don't set it and just call
methods on it, the default view model is automatically used.
## send
$view->send($status, @headers, \%data||$object);
$view->send($status, \%data||$object);
$view->send(\%data||$object);
$view->send($status);
$view->send($status, @headers);
Used to send a response. Calling this method will setup an http status, finalize
headers and set a body response for the JSON. Content type will be set to
'application/json' automatically (you don't need to set this in a header).
## Method '->send' Helpers
We map status codes from [HTTP::Status](https://metacpan.org/pod/HTTP::Status) into methods to make sending common
request types more simple and more descriptive. The following are the same:
$view->send(200, @args);
$view->send_ok(@args);
See [HTTP::Status](https://metacpan.org/pod/HTTP::Status) for a full list of all the status code helpers.
# ATTRIBUTES
( run in 0.980 second using v1.01-cache-2.11-cpan-39bf76dae61 )