TemplateService.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. $params = array('em' => $this->entityManager) + $params;
  46. if (!is_null($template)) {
  47. $content = $this->render($template, $params);
  48. var_dump($content);
  49. $filename = $this->createFile($content, $filename);
  50. }else{
  51. throw new \Exception ("Template $name not found");
  52. }
  53. return $filename;
  54. }
  55. /**
  56. * @param Template $template
  57. * @param array $params
  58. *
  59. * @return string
  60. */
  61. public function render($template, $params = array())
  62. {
  63. $loader = new \Twig_Loader_Array(array(
  64. $template->getName() => $template->getContent()
  65. ));
  66. $twig = new \Twig_Environment($loader, array(
  67. 'cache' => false,
  68. ));
  69. return $twig->render($template->getName(), $params);
  70. }
  71. /**
  72. * @param string $content
  73. * @param string $filename
  74. *
  75. * @return string
  76. */
  77. public function createFile($content, $filename = null)
  78. {
  79. if (is_null($filename)) {
  80. $filename = self::TEMPLATE_PATH . DIRECTORY_SEPARATOR . uniqid();
  81. }
  82. $pieces = explode(DIRECTORY_SEPARATOR, $filename);
  83. $file = array_pop($pieces);
  84. $dir = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pieces);
  85. if (!file_exists($dir)) {
  86. mkdir($dir, 0777, true);
  87. }
  88. file_put_contents($dir . DIRECTORY_SEPARATOR . $file, $content);
  89. return $filename;
  90. }
  91. }