# NAME

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

# VERSION

version 1.008

# 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.
- [choroba](https://github.com/choroba) for improvements to the test suite.

# AUTHOR

Thomas Klausner <domm@plix.at>

# 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.