Skip to content
This repository was archived by the owner on Apr 12, 2020. It is now read-only.
/ browser Public archive

Commit 84d2018

Browse files
committed
Added a better handling of twig exception in twig ext
1 parent deadbea commit 84d2018

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

src/Gitonomy/Browser/Twig/GitExtension.php

+23-4
Original file line numberDiff line numberDiff line change
@@ -210,18 +210,37 @@ public function renderBlock(\Twig_Environment $env, $block, $parameters = array(
210210
{
211211
foreach ($this->themes as $theme) {
212212
if ($theme instanceof \Twig_Template) {
213-
$tpl = $theme;
213+
$template = $theme;
214214
} else {
215-
$tpl = $env->loadTemplate($theme);
215+
$template = $env->loadTemplate($theme);
216216
}
217-
if ($tpl->hasBlock($block)) {
218-
return $tpl->renderBlock($block, $parameters);
217+
if ($template->hasBlock($block)) {
218+
return $this->renderTemplateBlock($env, $template, $block, $parameters);
219219
}
220220
}
221221

222222
throw new \InvalidArgumentException('Unable to find block '.$block);
223223
}
224224

225+
private function renderTemplateBlock(\Twig_Environment $env, \Twig_Template $template, $block, array $context = array())
226+
{
227+
$context = $env->mergeGlobals($context);
228+
$level = ob_get_level();
229+
ob_start();
230+
try {
231+
$rendered = $template->renderBlock($block, $context);
232+
ob_end_clean();
233+
234+
return $rendered;
235+
} catch (\Exception $e) {
236+
while (ob_get_level() > $level) {
237+
ob_end_clean();
238+
}
239+
240+
throw $e;
241+
}
242+
}
243+
225244
/**
226245
* {@inheritdoc}
227246
*/

0 commit comments

Comments
 (0)