protected function evaluatePath(string $path, array $data = [])
    {
        extract($data, EXTR_SKIP);
        try {
            if (!$this->smarty->isCached($path)) {
                foreach ($data as $var => $val) {
                    $this->smarty->assign($var, $val);
                }
            }
            // render
            $cacheId = isset($data['smarty.cache_id']) ? $data['smarty.cache_id'] : null;
            $compileId = isset($data['smarty.compile_id']) ? $data['smarty.compile_id'] : null;

            return $this->smarty->fetch($path, $cacheId, $compileId);
            // @codeCoverageIgnoreStart
        } catch (\SmartyException $e) {
            $this->handleViewException($e);
        } catch (Throwable $e) {
            $this->handleViewException(new FatalThrowableError($e));
        }
    }