1
0
Fork 0
composer/doc/07-runtime.md

96 lines
3.8 KiB
Markdown
Raw Normal View History

2020-05-01 08:18:54 +00:00
# Runtime Composer utilities
While Composer is mostly used around your project to install its dependencies,
there are a few things which are made available to you at runtime.
If you need to rely on some of these in a specific version, you can require
the `composer-runtime-api` package.
## Autoload
The autoloader is the most used one, and is already covered in our
[basic usage guide](#01-basic-usage.md#autoloading). It is available in all
Composer versions.
## Installed versions
composer-runtime-api 2.0 introduced a new `Composer\InstalledVersions` class which offers
a few static methods to inspect which versions are currently installed. This is
automatically available to your code as long as you include the Composer autoloader.
The main use cases for this class are the following:
### Knowing whether package X (or virtual package) is present
```php
\Composer\InstalledVersions::isInstalled('vendor/package'); // returns bool
\Composer\InstalledVersions::isInstalled('psr/log-implementation'); // returns bool
```
Note that this can not be used to check whether platform packages are installed.
### Knowing whether package X is installed in version Y
> **Note:** To use this, your package must require `"composer/semver": "^2.0"`.
```php
use Composer\Semver\VersionParser;
\Composer\InstalledVersions::satisfies(new VersionParser, 'vendor/package', '2.0.*');
\Composer\InstalledVersions::satisfies(new VersionParser, 'psr/log-implementation', '^1.0');
```
This will return true if e.g. vendor/package is installed in a version matching
`2.0.*`, but also if the given package name is replaced or provided by some other
package.
### Knowing the version of package X
> **Note:** This will return `null` if the package name you ask for is not itself installed
> but merely provided or replaced by another package. We therefore recommend using satisfies()
> in library code at least. In application code you have a bit more control and it is less
> important.
```php
// returns a normalized version (e.g. 1.2.3.0) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getVersion('vendor/package');
```
```php
// returns the original version (e.g. v1.2.3) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getPrettyVersion('vendor/package');
```
```php
// returns the package dist or source reference (e.g. a git commit hash) if vendor/package is installed,
// or null if it is provided/replaced,
// or throws OutOfBoundsException if the package is not installed at all
\Composer\InstalledVersions::getReference('vendor/package');
```
A few other methods are available for more complex usages, please refer to the
source/docblocks of the class itself.
## Platform check
composer-runtime-api 2.0 introduced a new `vendor/composer/platform_check.php` file, which
is included automatically when you include the Composer autoloader.
It verifies that platform requirements (i.e. php and php extensions) are fulfilled
by the PHP process currently running. If the requirements are not met, the script
prints a warning with the missing requirements and exits with code 104.
To avoid an unexpected white page of death with some obscure PHP extension warning in
production, you can run `composer check-platform-reqs --no-dev` as part of your
deployment/build and if that returns a non-0 code you should abort.
2020-05-01 08:18:54 +00:00
If you for some reason do not want to use this safety check, and would rather
risk runtime errors when your code executes, you can disable this by setting the
[`platform-check`](06-config.md#platform-check) config option to `false`.
← [Config](06-config.md) | [Community](08-community.md) →