ParameterResolver.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. }