Formatter.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. /*
  3. * Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
  4. * SPDX-License-Identifier: MIT
  5. */
  6. declare(strict_types=1);
  7. namespace Respect\Validation\Message;
  8. use function call_user_func;
  9. use function preg_replace_callback;
  10. use function Respect\Stringifier\stringify;
  11. final class Formatter
  12. {
  13. /**
  14. * @var callable
  15. */
  16. private $translator;
  17. /**
  18. * @var ParameterStringifier
  19. */
  20. private $parameterStringifier;
  21. public function __construct(callable $translator, ParameterStringifier $parameterStringifier)
  22. {
  23. $this->translator = $translator;
  24. $this->parameterStringifier = $parameterStringifier;
  25. }
  26. /**
  27. * @param mixed $input
  28. * @param mixed[] $parameters
  29. */
  30. public function format(string $template, $input, array $parameters): string
  31. {
  32. $parameters['name'] = $parameters['name'] ?? stringify($input);
  33. return preg_replace_callback(
  34. '/{{(\w+)}}/',
  35. function ($match) use ($parameters) {
  36. if (!isset($parameters[$match[1]])) {
  37. return $match[0];
  38. }
  39. return $this->parameterStringifier->stringify($match[1], $parameters[$match[1]]);
  40. },
  41. call_user_func($this->translator, $template)
  42. );
  43. }
  44. }