InteractsWithComposerPackages.php
TLDR
This file provides a trait called InteractsWithComposerPackages
that contains two methods:
requireComposerPackages
Installs the given Composer Packages into the application. This method takes a string $composer
and an array $packages
as parameters and returns a boolean value.
phpBinary
This method returns the path to the appropriate PHP binary.
<?php
namespace Illuminate\Foundation\Console;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\Process;
trait InteractsWithComposerPackages
{
/**
* Installs the given Composer Packages into the application.
*
* @param string $composer
* @param array $packages
* @return bool
*/
protected function requireComposerPackages(string $composer, array $packages)
{
if ($composer !== 'global') {
$command = [$this->phpBinary(), $composer, 'require'];
}
$command = array_merge(
$command ?? ['composer', 'require'],
$packages,
);
return ! (new Process($command, $this->laravel->basePath(), ['COMPOSER_MEMORY_LIMIT' => '-1']))
->setTimeout(null)
->run(function ($type, $output) {
$this->output->write($output);
});
}
/**
* Get the path to the appropriate PHP binary.
*
* @return string
*/
protected function phpBinary()
{
return (new PhpExecutableFinder())->find(false) ?: 'php';
}
}