ContainerCommandLoader.php
TLDR
The file ContainerCommandLoader.php
is a part of the Illuminate\Console namespace and contains the ContainerCommandLoader
class. This class implements the CommandLoaderInterface
interface and is used to resolve and load console commands from a container.
Methods
__construct(ContainerInterface $container, array $commandMap): void
This method is the constructor of the ContainerCommandLoader
class. It initializes the class with a container instance and a map of command names to classes.
get(string $name): Command
This method resolves a command from the container based on the given name. It returns an instance of the Command
class.
has(string $name): bool
This method checks if a command with the given name exists in the command map. It returns a boolean value indicating the presence of the command.
getNames(): array
This method returns an array of command names from the command map.
END
<?php
namespace Illuminate\Console;
use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\CommandLoader\CommandLoaderInterface;
use Symfony\Component\Console\Exception\CommandNotFoundException;
class ContainerCommandLoader implements CommandLoaderInterface
{
/**
* The container instance.
*
* @var \Psr\Container\ContainerInterface
*/
protected $container;
/**
* A map of command names to classes.
*
* @var array
*/
protected $commandMap;
/**
* Create a new command loader instance.
*
* @param \Psr\Container\ContainerInterface $container
* @param array $commandMap
* @return void
*/
public function __construct(ContainerInterface $container, array $commandMap)
{
$this->container = $container;
$this->commandMap = $commandMap;
}
/**
* Resolve a command from the container.
*
* @param string $name
* @return \Symfony\Component\Console\Command\Command
*
* @throws \Symfony\Component\Console\Exception\CommandNotFoundException
*/
public function get(string $name): Command
{
if (! $this->has($name)) {
throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name));
}
return $this->container->get($this->commandMap[$name]);
}
/**
* Determines if a command exists.
*
* @param string $name
* @return bool
*/
public function has(string $name): bool
{
return $name && isset($this->commandMap[$name]);
}
/**
* Get the command names.
*
* @return string[]
*/
public function getNames(): array
{
return array_keys($this->commandMap);
}
}