ptournet/laravel-multiformat

Multiformat Endpoints in Laravel

v1.1.1 2020-08-10 18:40 UTC

This package is auto-updated.

Last update: 2024-10-11 04:37:12 UTC


README

Latest Stable Version Latest Unstable Version Build Status Total Downloads License

This package allows a single Laravel route to answer with different formats (often HTML and JSON). It is meant to be a drop-in replacement fo the unmaintained package: m1guelpf/laravel-multiformat with new features and compatibility with the latest Laravel versions.

Installation

You can install the package via composer:

composer require ptournet/laravel-multiformat

Usage

<?php

/**
 * Mark a route as 'multiformat' to allow different extensions (html, json, xml, etc.)
 *
 * This route will match all of these requests:
 *     /podcasts/4
 *     /podcasts/4.json
 *     /podcasts/4.html
 *     /podcasts/4.zip
 */
Route::get('/podcasts/{id}', 'PodcastsController@show')->multiformat();

/**
 * Use `Request::matchFormat()` to return the right response for the requested format.
 *
 * Supports closures to avoid doing unnecessary work, and returns 404 if the
 * requested format is not supported.
 *
 * Will also take into account the `Accept` header if no extension is provided.
 */
class PodcastsController
{
    public function show($id)
    {
        $podcast = Podcast::findOrFail($id);
        
        return request()->matchFormat([
            'html' => view('podcasts.show', [
                'podcast' => $podcast,
                'episodes' => $podcast->recentEpisodes(5),
            ]),
            'json' => $podcast,
            'xml' => function () use ($podcast) {
                return response($podcast->toXml(), 200, ['Content-Type' => 'text/xml']);
            }
        ]);
    }
}

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email ptournet (at sign) gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.