entityManager = $entityManager; $this->auditReader = $auditReader; $this->templateRepository = $entityManager->getRepository('TemplateBundle:Template'); } /** * @param string $name * * @return Template */ public function getTemplateByName($name) { return $this->templateRepository->findOneByName($name); } /** * @param string $name * @param array $params * @param string $filename * @param string $engine * * @return string */ public function renderTemplate($name, $params = array(), $filename = null, $engine = 'twig') { $content = null; $template = $this->getTemplateByName($name); $params = array('em' => $this->entityManager, 'baars' => $this->auditReader) + $params; if (!is_null($template)) { $content = $this->render($template, $params, $engine); var_dump($content); $filename = $this->createFile($content, $filename); } else { throw new \Exception("Template {$name} not found"); } return $filename; } /** * @param Template $template * @param array $params * @param string $engine * * @return string */ public function render($template, $params = array(), $engine = 'twig') { if ($engine == 'twig') { $loader = new \Twig_Loader_Array(array( $template->getName() => $template->getContent() )); $twig = new \Twig_Environment($loader, array( 'cache' => false, )); $content = $twig->render($template->getName(), $params); } elseif ($engine == 'dwoo') { $core = new \Dwoo\Core(); $tpl = new \Dwoo\Template\Str($template->getContent()); $data = new \Dwoo\Data(); $data->setData($params); $content = $core->get($tpl, $data); } else { throw new \Exception("Invalid {$engine} engine value"); } return $content; } /** * @param string $content * @param string $filename * * @return string */ public function createFile($content, $filename = null) { if (is_null($filename)) { $filename = self::TEMPLATE_PATH . DIRECTORY_SEPARATOR . uniqid(); } $pieces = explode(DIRECTORY_SEPARATOR, $filename); $file = array_pop($pieces); $dir = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pieces); if (!file_exists($dir)) { mkdir($dir, 0777, true); } file_put_contents($dir . DIRECTORY_SEPARATOR . $file, $content); return $filename; } /** * Retorna si encuentra un template en la db con nombre = $name * * @param string $name * * @return boolean */ public function exists($name) { $template = $this->getTemplateByName($name); return !is_null($template); } }