| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Console\Interaction;
- use Symfony\Component\Console\Attribute\InteractiveAttributeInterface;
- use Symfony\Component\Console\Attribute\MapInput;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Output\OutputInterface;
- /**
- * @internal
- */
- final class Interaction
- {
- public function __construct(
- private readonly object $owner,
- private readonly InteractiveAttributeInterface $attribute,
- ) {
- }
- /**
- * @param \Closure(\ReflectionFunction $function, InputInterface $input, OutputInterface $output): array $parameterResolver
- */
- public function interact(InputInterface $input, OutputInterface $output, \Closure $parameterResolver): void
- {
- if ($this->owner instanceof MapInput) {
- $function = $this->attribute->getFunction($this->owner->resolveValue($input));
- $function->invoke(...$parameterResolver($function, $input, $output));
- $this->owner->setValue($input, $function->getClosureThis());
- return;
- }
- $function = $this->attribute->getFunction($this->owner);
- $function->invoke(...$args = $parameterResolver($function, $input, $output));
- foreach ($function->getParameters() as $i => $parameter) {
- if (\is_object($args[$i]) && $spec = MapInput::tryFrom($parameter)) {
- $spec->setValue($input, $args[$i]);
- }
- }
- }
- }
|