ManaPHP\Renderer::render PHP Method

render() public method

Checks whether $template exists on registered extensions and render it
public render ( string $template, array $vars = [], boolean $directOutput = false ) : string
$template string
$vars array
$directOutput boolean
return string
    public function render($template, $vars = [], $directOutput = false)
    {
        $notExists = true;
        $content = null;
        foreach ($this->_engines as $extension => $engine) {
            $file = $this->alias->resolve($template . $extension);
            if (file_exists($file)) {
                if (PHP_EOL !== "\n") {
                    $realPath = str_replace('\\', '/', realpath($file));
                    if ($file !== $realPath) {
                        trigger_error("File name ({$realPath}) case mismatch for {$file}", E_USER_ERROR);
                    }
                }
                if (!isset($this->_resolved[$extension])) {
                    $this->_resolved[$extension] = $this->_dependencyInjector->getShared($engine, [$this->_dependencyInjector]);
                }
                $engine = $this->_resolved[$extension];
                $eventArguments = ['file' => $file, 'vars' => $vars];
                $this->fireEvent('renderer:beforeRender', $eventArguments);
                if (isset($vars['renderer'])) {
                    throw new RendererException('variable `renderer` is reserved for renderer');
                }
                $vars['renderer'] = $this;
                if (isset($vars['di'])) {
                    throw new RendererException('variable `di` is reserved for renderer');
                }
                $vars['di'] = $this->_dependencyInjector;
                if (isset($vars['url'])) {
                    throw new RendererException('variable `url` is reserved for renderer');
                }
                $vars['url'] = isset($this->url) ? $this->url : null;
                if ($directOutput) {
                    $engine->render($file, $vars);
                    $content = null;
                } else {
                    ob_start();
                    try {
                        $engine->render($file, $vars);
                    } catch (\Exception $e) {
                        ob_end_clean();
                        /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
                        throw $e;
                    }
                    $content = ob_get_clean();
                }
                $notExists = false;
                $this->fireEvent('renderer:afterRender', $eventArguments);
                break;
            }
        }
        if ($notExists) {
            throw new RendererException('`:template` with `:extensions` extension file was not found', ['template' => $template, 'extensions' => implode(', or ', array_keys($this->_engines))]);
        }
        return $content;
    }