|null */ private ?array $definitions = null; public function __construct( private readonly string $emailTextsFile, ) { } /** * @return array keyed by EmailTextKey value */ public function all(): array { return $this->definitions ??= $this->build(); } public function get(EmailTextKey $key): EmailTextDefinition { return $this->all()[$key->value]; } /** * @return array */ private function build(): array { $config = Yaml::parseFile($this->emailTextsFile); $descriptions = $config['placeholders']; $definitions = []; foreach (EmailTextKey::cases() as $key) { $text = $config['texts'][$key->value]; $placeholders = []; foreach ($text['placeholders'] as $name) { $placeholders[$name] = $descriptions[$name]; } $definitions[$key->value] = new EmailTextDefinition( $key, $text['label'], $placeholders, $text['subject'], $text['headline'], $text['body'], ); } return $definitions; } }