Pārlūkot izejas kodu

Se agrega option engine al comando template:render para renderizar en twig o dwoo

Guillermo Espinoza 7 gadi atpakaļ
vecāks
revīzija
ddfae6a5b9
2 mainītis faili ar 58 papildinājumiem un 39 dzēšanām
  1. 12 11
      Command/RenderTemplateCommand.php
  2. 46 28
      Services/TemplateService.php

+ 12 - 11
Command/RenderTemplateCommand.php

@@ -21,16 +21,17 @@ class RenderTemplateCommand extends ContainerAwareCommand
             ->addOption('filename', null, InputOption::VALUE_OPTIONAL, 'Template output file')
             ->addOption(
                 'parameter',
-                null, 
-                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 
+                null,
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
                 'Array with template parameters. e.g., --parameter=key1:value1 --parameter=key2:value2'
             )
             ->addOption(
                 'dump',
-                'd', 
-                InputOption::VALUE_NONE, 
+                'd',
+                InputOption::VALUE_NONE,
                 'Dump template content'
-            )    
+            )
+            ->addOption('engine', null, InputOption::VALUE_OPTIONAL, 'Render engine. e.g. twig|dwoo', 'twig')
         ;
     }
 
@@ -52,14 +53,14 @@ class RenderTemplateCommand extends ContainerAwareCommand
         try {
             /* @var $templateService TemplateService */
             $templateService = $this->getContainer()->get('template.template_service');
-            $filename = $templateService->renderTemplate($name, $parameters, $input->getOption('filename'));
+            $filename = $templateService->renderTemplate($name, $parameters, $input->getOption('filename'), $input->getOption('engine'));
             if (!is_null($filename)) {
                 $output->writeln("Template successfully generated! File: <info>{$filename}</info>");
-                
+
                 if ($input->getOption('dump')) {
                     $output->writeln(file_get_contents($filename));
                 }
-                
+
             } else {
                 $output->writeln('<error>Template not found</error>');
             }
@@ -67,11 +68,11 @@ class RenderTemplateCommand extends ContainerAwareCommand
             $output->writeln(sprintf('<error>%s</error>', $ex->getMessage()));
         }
     }
-    
+
     /**
      * @param InputInterface $input
      * @param OutputInterface $output
-     * 
+     *
      * @return array
      */
     public function getParameters(InputInterface $input, OutputInterface $output)
@@ -95,7 +96,7 @@ class RenderTemplateCommand extends ContainerAwareCommand
                 $parameters[trim($pieces[0])] = trim($pieces[1]);
             }
         }
-        
+
         return $parameters;
     }
 

+ 46 - 28
Services/TemplateService.php

@@ -8,16 +8,16 @@ use TemplateBundle\Entity\Template;
 
 class TemplateService
 {
-    
+
     const TEMPLATE_PATH = '/tmp/flowdat/templates';
-    
+
     /**
      * @var EntityManagerInterface
      */
     private $entityManager;
-    
+
     /**
-     * @var EntityRepository 
+     * @var EntityRepository
      */
     private $templateRepository;
 
@@ -30,60 +30,78 @@ class TemplateService
         $this->entityManager = $entityManager;
         $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)
+    public function renderTemplate($name, $params = array(), $filename = null, $engine = 'twig')
     {
         $content = null;
         $template = $this->getTemplateByName($name);
         if (!is_null($template)) {
-            $content = $this->render($template, $params);
-	    var_dump($content);
+            $content = $this->render($template, $params, $engine);
+    	    var_dump($content);
             $filename = $this->createFile($content, $filename);
-	}else{
-		throw new \Exception ("Template $name not found"); 
-	}
-        
+    	} 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())
+    public function render($template, $params = array(), $engine = 'twig')
     {
-        $loader = new \Twig_Loader_Array(array(
-            $template->getName() => $template->getContent()
-        ));
-        $twig = new \Twig_Environment($loader, array(
-            'cache' => false,
-        ));
-        return $twig->render($template->getName(), $params);
+        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)
@@ -101,5 +119,5 @@ class TemplateService
 
         return $filename;
     }
-    
+
 }