# NAME

Web::Request::Role::Response - Generate various HTTP responses from a Web::Request

# VERSION

version 1.006

# SYNOPSIS

   # Create a request handler
   package My::App::Request;
   use Moose;
   extends 'Web::Request';
   with 'Web::Request::Role::Response';

   # Make sure your app uses your request handler, e.g. using OX:
   package My::App::OX;
   sub request_class {'My::App::Request'}

   # in some controller action:

   # redirect
   $req->redirect('/');
   $req->permanent_redirect('/foo');

   # return 204 no content
   $req->no_content_response;

   # return a transparent 1x1 gif (eg as a tracking pixle)
   $req->transparent_gif_response;

   # file download
   $req->file_download_response( 'text/csv', $data, 'your_export.csv' );

# DESCRIPTION

`Web::Request::Role::JSON` provides a few methods that make generating HTTP responses easier when using [Web::Request](https://metacpan.org/pod/Web%3A%3ARequest).

Please note that all methods return a [Web::Response](https://metacpan.org/pod/Web%3A%3AResponse) object.
Depending on the framework you use (or lack thereof), you might have
to call `finalize` on the response object to turn it into a valid
PSGI response.

## METHODS

### redirect

   $req->redirect( '/some/location' );
   $req->redirect( $ref_uri_for );
   $req->redirect( 'http://example.com', 307 );

Redirect to the given location. The location can be a string
representing an absolute or relative URL. You can also pass a ref,
which will be resolved by calling `uri_for` on the request object -
so be sure that your request object has this method (extra points if
the method also returns something meaningful)!

You can pass a HTTP status code as a second parameter. It's probably
smart to use one that makes sense in a redirecting context...

### permanent\_redirect

   $req->permanent_redirect( 'http://we.moved.here' );

Similar to `redirect`, but will issue a permanent redirect (who would
have thought!) using HTTP status code `301`.

### file\_download\_response

   $req->file_download_response( $content-type, $data, $filename );

Generate a "Download-File" response. Useful if your app returns a
CSV/Spreadsheet/MP3 etc. You have to provide the correct content-type,
the data in the correct encoding and a meaningful filename.

### no\_content\_response

   $req->no_content_response

Returns `204 No Content`.

### transparent\_gif\_response

   $req->transparent_gif_response

Returns a transparent 1x1 pixel GIF. Useful as the response of a
tracking URL.

# THANKS

Thanks to

- [validad.com](https://www.validad.com/) for supporting Open Source.

# AUTHOR

Thomas Klausner <[email protected]>

# COPYRIGHT AND LICENSE

This software is copyright (c) 2017 - 2021 by Thomas Klausner.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.