Provides a metapackage for library needing php-http/client-implementation
that fallback to a default implementation when user does not meet
the initial requirements.
composer require "composer-fallback/php-http.client-implementation.symfony:*"
Composer will, by preference:
- use an implementation provided by the user
- otherwise, fallbacks to
symfony/http-client
This package contains 2 versions:
-
The highest 1.1 needs nothing more than your requirements.
-
The lowest 1.0 triggers install of
symfony/http-client
.
Composer will choose this highest version when user already has a package that satisfy php-http/client-implementation
.
Otherwise, composer will choose the lowest version and in that case will
download the following packages: symfony/http-client
.
You are maintaining a library that need an implementation of php-http/client-implementation
,
but you don't want requiring a specific implementation.
ie. You are maintainer of library that use the following composer.json
{
"name": "acme/lib",
"require": {
"php-http/client-implementation": "^1.0",
}
}
When end users requires you library with the following code
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0"
}
}
They probably ends with such error
composer up
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for acme/lib ^1.0 -> satisfiable by acme/lib[1.0].
- acme/lib 1.0 requires php-http/client-implementation ^1.0 -> no matching package found.
You can ask user to install a random package, it works, but the DX is very bad, and confusing at first.
By using composer-fallback/php-http.client-implementation.symfony
,
users will be able to require their preferred implementation
or fallback to your default choice
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0",
"third-party/provide-implementation": "^1.0"
}
}
composer up
...
Package operations: 2 installs, 0 updates, 0 removals
- Installing acme/lib (1.0)
- Installing composer-fallback/php-http.client-implementation.symfony (1.1)
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0"
}
}
composer up
...
Package operations: 3 installs, 0 updates, 0 removals
- Installing acme/lib (1.0)
- Installing composer-fallback/php-http.client-implementation.symfony (1.0)
- Installing symfony/http-client (1.0)
This repository is automatically generated. If you want contributing and submitting an issue or a Pull Request, please use composer-fallback/generator.