TemplateRender.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Services;
  3. use App\Services\Templates\ConfidenceTemplate;
  4. use App\Services\Templates\NissayaTemplate;
  5. use App\Services\Templates\NoteTemplate;
  6. use App\Services\Templates\TemplateInterface;
  7. use App\Services\Templates\TermTemplate;
  8. use InvalidArgumentException;
  9. class TemplateRender
  10. {
  11. protected string $templateName;
  12. protected array $params = [];
  13. protected TemplateInterface $template;
  14. // 定义默认公共参数
  15. protected array $options = [
  16. 'format' => 'react', // 默认格式为 react
  17. ];
  18. public static function name(string $templateName): self
  19. {
  20. $instance = new self;
  21. $instance->templateName = $templateName;
  22. return $instance;
  23. }
  24. public function param(array $params): self
  25. {
  26. $this->params = $params;
  27. return $this;
  28. }
  29. public function options(array $options): self
  30. {
  31. $this->options = $options;
  32. return $this;
  33. }
  34. public function render(): array
  35. {
  36. // 解析模板类
  37. $this->resolveTemplate();
  38. // 设置参数并渲染
  39. return $this->template
  40. ->setParams($this->params)
  41. ->setOptions($this->options)
  42. ->render();
  43. }
  44. protected function resolveTemplate(): void
  45. {
  46. // 模板名称到类的映射(可以用配置文件替代)
  47. $templateMap = [
  48. 'cf' => ConfidenceTemplate::class,
  49. 'nissaya' => NissayaTemplate::class,
  50. 'term' => TermTemplate::class,
  51. 'note' => NoteTemplate::class,
  52. ];
  53. if (! isset($templateMap[$this->templateName])) {
  54. throw new InvalidArgumentException("Template {$this->templateName} not found.");
  55. }
  56. // 通过服务容器解析模板类
  57. $this->template = app($templateMap[$this->templateName]);
  58. }
  59. }