Skip to content

Commit f27ecef

Browse files
committed
handle templates with errors when extracting variables
1 parent 4332580 commit f27ecef

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/Helpers/TemplateManager.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@ public function extractVariableNames(): array
2424
$source = $this->template->layout?->content . $this->template->content;
2525

2626
$twig = new Environment(new ArrayLoader());
27-
$nodes = $twig->parse(
28-
$twig->tokenize(new Source($source, ''))
29-
)->getNode('body')->getNode('0');
27+
28+
try {
29+
$nodes = $twig->parse(
30+
$twig->tokenize(new Source($source, ''))
31+
)->getNode('body')->getNode('0');
32+
} catch (\Exception) {
33+
return [];
34+
}
3035

3136
preg_match_all("|Twig\\\Node\\\Expression\\\NameExpression\(name\: '(.*)'|mi", (string) $nodes, $matches);
3237

tests/Unit/TemplateManager/ExtractVariableNamesTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,17 @@
6767

6868
expect($output)->toBe(['headline', 'name', 'ctaUrl', 'isPremium', 'tierLevel']);
6969
});
70+
71+
it('returns empty array for a template with errors', function () {
72+
$template = new Template([
73+
'content' => <<<'TWIG'
74+
Hello {{ name }},
75+
{% if isPremium|default(false) %%}
76+
{{ tierLevel|title }}
77+
TWIG,
78+
]);
79+
80+
$output = TemplateManager::make($template)->extractVariableNames();
81+
82+
expect($output)->toBe([]);
83+
});

0 commit comments

Comments
 (0)