Content Negotiation for PHP.
This framework-independent library provides tooling to allow you to support content negotiation in your applications.
Supports negotiation on the Accept, Accept-Charset, Accept-Encoding and Accept-Language fields in a HTTP header.
With composer:
$ composer require ptlis/conneg:~4.0.0
If your application supports PSR-7 then the simplest way to get content negotiation is via the middlewares provided by ptlis/psr7-conneg.
First create a Negotiation instance. This provides methods to perform negotiation on client and server preferences.
use ptlis\ConNeg\Negotiation;
$negotiation = new Negotiation();
In most cases your application will only care about the best match, to get these we can use the *Best()
methods.
For example, negotiation to decide whether to serve JSON or XML (preferring JSON) would look like:
$bestMime = $negotiation->mimeBest(
$_SERVER['ACCEPT'],
'application/json;q=1,application/xml;q=0.75'
);
This will return a string representation of the best matching mime-type specified by the server's preferences, for example 'application/json'.
Negotiation of Language, Encoding & Charset can be done by using the appropriate method (languageBest, encodingBest & charsetBest respectively).
Note: server preferences a string-encoded as described in the documentation.
See the detailed usage docs for further (more complex) examples.
- PSR-7 via the ptlis/psr7-conneg package, with middlewares supporting:
- Symfony2 via the ptlis/conneg-bundle Bundle.
You can contribute by submitting an Issue to the issue tracker, improving the documentation, integrating the library into your framework of choice or submitting a pull request. For pull requests i'd prefer that the code style and test coverage is maintained, but I am happy to work through any minor issues that may arise so that the request can be merged.
- Time based negotiation? See RFC 7089