Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace Symfony\Component\Console\CommandLoader; Chris@14: Chris@14: use Symfony\Component\Console\Exception\CommandNotFoundException; Chris@14: Chris@14: /** Chris@14: * A simple command loader using factories to instantiate commands lazily. Chris@14: * Chris@14: * @author Maxime Steinhausser Chris@14: */ Chris@14: class FactoryCommandLoader implements CommandLoaderInterface Chris@14: { Chris@14: private $factories; Chris@14: Chris@14: /** Chris@14: * @param callable[] $factories Indexed by command names Chris@14: */ Chris@14: public function __construct(array $factories) Chris@14: { Chris@14: $this->factories = $factories; Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function has($name) Chris@14: { Chris@14: return isset($this->factories[$name]); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function get($name) Chris@14: { Chris@14: if (!isset($this->factories[$name])) { Chris@14: throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); Chris@14: } Chris@14: Chris@14: $factory = $this->factories[$name]; Chris@14: Chris@14: return $factory(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function getNames() Chris@14: { Chris@14: return array_keys($this->factories); Chris@14: } Chris@14: }