TemplateService.php 2.5 KB

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