ParameterResolver.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Services\Template;
  3. // ================== 参数解析器 ==================
  4. class ParameterResolver
  5. {
  6. private TemplateRegistry $registry;
  7. public function __construct(TemplateRegistry $registry)
  8. {
  9. $this->registry = $registry;
  10. }
  11. public function resolveParameters(string $templateName, array $rawParams): array
  12. {
  13. $template = $this->registry->getTemplate($templateName);
  14. if (!$template) {
  15. return $rawParams;
  16. }
  17. $resolved = [];
  18. $paramMapping = $template['paramMapping'] ?? [];
  19. $defaultValues = $template['defaultValues'] ?? [];
  20. // 处理位置参数
  21. $positionIndex = 0;
  22. foreach ($rawParams as $key => $value) {
  23. if (is_numeric($key)) {
  24. // 位置参数
  25. $paramName = $paramMapping[$positionIndex] ?? $positionIndex;
  26. $resolved[$paramName] = $value;
  27. $positionIndex++;
  28. } else {
  29. // 命名参数
  30. $resolved[$key] = $value;
  31. }
  32. }
  33. // 应用默认值
  34. foreach ($defaultValues as $key => $value) {
  35. if (!isset($resolved[$key])) {
  36. $resolved[$key] = $value;
  37. }
  38. }
  39. return $resolved;
  40. }
  41. }