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 )