/** * Renders template using provided data. * * This method is managing exceptions thrown inside to bubble up to current * level of output buffering at least. * * @param string $template template name to render * @param variable_space|array $data data to use on rendering template * @return string rendered template */ public static function render($template = null, $data = null) { $oblevel = ob_get_level(); try { if ($data === null || is_array($data)) { $data = variable_space::fromArray((array) $data); } // @todo consider selecting engine depending on current configuration instead of using current view's one return static::engine()->render($template, $data); } catch (\Exception $e) { while ($oblevel < ob_get_level()) { ob_end_clean(); } static::error(log::exception('[%s:%s in %s@%d]', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine())); return ''; } }