TemplateService.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace TemplateBundle\Services;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Doctrine\ORM\EntityRepository;
  5. use TemplateBundle\Entity\Template;
  6. class TemplateService
  7. {
  8. const TEMPLATE_PATH = '/tmp/flowdat/templates';
  9. /**
  10. * @var EntityManagerInterface
  11. */
  12. private $entityManager;
  13. /**
  14. * @var EntityRepository
  15. */
  16. private $templateRepository;
  17. /**
  18. * @param EntityManagerInterface $entityManager
  19. */
  20. public function __construct(EntityManagerInterface $entityManager)
  21. {
  22. $this->entityManager = $entityManager;
  23. $this->templateRepository = $entityManager->getRepository('TemplateBundle:Template');
  24. }
  25. /**
  26. * @param string $name
  27. *
  28. * @return Template
  29. */
  30. public function getTemplateByName($name)
  31. {
  32. return $this->templateRepository->findOneByName($name);
  33. }
  34. /**
  35. * @param string $name
  36. * @param array $params
  37. * @param string $filename
  38. *
  39. * @return string
  40. */
  41. public function renderTemplate($name, $params = array(), $filename = null)
  42. {
  43. $content = null;
  44. $template = $this->getTemplateByName($name);
  45. if (!is_null($template)) {
  46. $content = $this->render($template, $params);
  47. var_dump($content);
  48. $filename = $this->createFile($content, $filename);
  49. }else{
  50. throw new \Exception ("Template $name not found");
  51. }
  52. return $filename;
  53. }
  54. /**
  55. * @param Template $template
  56. * @param array $params
  57. *
  58. * @return string
  59. */
  60. public function render($template, $params = array())
  61. {
  62. $loader = new \Twig_Loader_Array(array(
  63. $template->getName() => $template->getContent()
  64. ));
  65. $twig = new \Twig_Environment($loader, array(
  66. 'cache' => false,
  67. ));
  68. return $twig->render($template->getName(), $params);
  69. }
  70. /**
  71. * @param string $content
  72. * @param string $filename
  73. *
  74. * @return string
  75. */
  76. public function createFile($content, $filename = null)
  77. {
  78. if (is_null($filename)) {
  79. $filename = self::TEMPLATE_PATH . DIRECTORY_SEPARATOR . uniqid();
  80. }
  81. $pieces = explode(DIRECTORY_SEPARATOR, $filename);
  82. $file = array_pop($pieces);
  83. $dir = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pieces);
  84. if (!file_exists($dir)) {
  85. mkdir($dir, 0777, true);
  86. }
  87. file_put_contents($dir . DIRECTORY_SEPARATOR . $file, $content);
  88. return $filename;
  89. }
  90. }