* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Behat\Behat\HelperContainer\Argument; use Behat\Behat\Context\Argument\ArgumentResolver; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use ReflectionClass; /** * Resolves arguments using provided service container. * * @see ContextFactory * * @author Konstantin Kudryashov */ final class ServicesResolver implements ArgumentResolver { /** * @var ContainerInterface */ private $container; /** * Initialises resolver. * * @param ContainerInterface $container */ public function __construct(ContainerInterface $container) { $this->container = $container; } /** * {@inheritdoc} * * @throws ContainerExceptionInterface */ public function resolveArguments(ReflectionClass $classReflection, array $arguments) { return array_map(array($this, 'resolveArgument'), $arguments); } /** * Attempts to resolve singular argument from container. * * Convention is strings starting with `@` are considered services and * are expected to be present in the container. * * @param mixed $value * * @return mixed * * @throws ContainerExceptionInterface */ private function resolveArgument($value) { if (0 === mb_strpos($value, '@')) { return $this->container->get(mb_substr($value, 1)); } return $value; } }