ptlis / conneg
Tools for performing content negotiation.
Installs: 3 083
Dependents: 1
Suggesters: 0
Security: 0
Stars: 35
Watchers: 6
Forks: 2
Open Issues: 0
Requires
- php: >=5.3.0
Requires (Dev)
- pdepend/pdepend: ~2.0
- phploc/phploc: ~2.0
- phpmd/phpmd: ~2.2
- phpunit/phpunit: ~4.5
- sebastian/phpcpd: ~2.0
- squizlabs/php_codesniffer: ~2.0
This package is auto-updated.
Last update: 2024-11-11 21:17:07 UTC
README
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.
Install
With composer:
$ composer require ptlis/conneg:~4.0.0
Usage
In a PSR-7 Project
If your application supports PSR-7 then the simplest way to get content negotiation is via the middlewares provided by ptlis/psr7-conneg.
In non PSR-7 Projects
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.
Documentation
Integration
- PSR-7 via the ptlis/psr7-conneg package, with middlewares supporting:
- Symfony2 via the ptlis/conneg-bundle Bundle.
Contributing
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.
TODO
- Time based negotiation? See RFC 7089