5 * Contains \Drupal\Console\Core\Utils\TwigRenderer.
8 namespace Drupal\Console\Core\Utils;
13 * @package Drupal\Console\Core\Utils
18 * @var TranslatorManagerInterface
20 protected $translator;
23 * @var \Twig_Environment
30 protected $skeletonDirs;
33 * @var StringConverter
35 protected $stringConverter;
38 * TwigRenderer constructor.
40 * @param TranslatorManagerInterface $translator
41 * @param StringConverter $stringConverter
43 public function __construct(
44 TranslatorManagerInterface $translator,
45 StringConverter $stringConverter
47 $this->translator = $translator;
48 $this->stringConverter = $stringConverter;
52 * @param array $skeletonDirs
54 public function setSkeletonDirs(array $skeletonDirs)
56 foreach ($skeletonDirs as $skeletonDir) {
57 $this->addSkeletonDir($skeletonDir);
64 public function addSkeletonDir($skeletonDir)
66 if (is_dir($skeletonDir)) {
67 $this->skeletonDirs[] = $skeletonDir;
74 public function getSkeletonDirs()
76 if (!$this->skeletonDirs) {
77 $this->skeletonDirs[] = __DIR__ . '/../../templates';
80 return $this->skeletonDirs;
84 * @param string $template
85 * @param array $parameters
89 public function render($template, $parameters = [])
92 $this->engine = new \Twig_Environment(
93 new \Twig_Loader_Filesystem($this->getSkeletonDirs()), [
96 'strict_variables' => true,
97 'autoescape' => false,
101 $this->engine->addFunction($this->getServicesAsParameters());
102 $this->engine->addFunction($this->getServicesAsParametersKeys());
103 $this->engine->addFunction($this->getArgumentsFromRoute());
104 $this->engine->addFunction($this->getServicesClassInitialization());
105 $this->engine->addFunction($this->getServicesClassInjection());
106 $this->engine->addFunction($this->getTagsAsArray());
107 $this->engine->addFunction($this->getTranslationAsYamlComment());
108 $this->engine->addFilter($this->createMachineName());
111 return $this->engine->render($template, $parameters);
115 * @return \Twig_SimpleFunction
117 public function getServicesAsParameters()
119 $servicesAsParameters = new \Twig_SimpleFunction(
120 'servicesAsParameters', function ($services) {
122 foreach ($services as $service) {
123 $returnValues[] = sprintf('%s $%s', $service['short'], $service['machine_name']);
126 return $returnValues;
130 return $servicesAsParameters;
134 * @return \Twig_SimpleFunction
136 public function getServicesAsParametersKeys()
138 $servicesAsParametersKeys = new \Twig_SimpleFunction(
139 'servicesAsParametersKeys', function ($services) {
141 foreach ($services as $service) {
142 $returnValues[] = sprintf('\'@%s\'', $service['name']);
145 return $returnValues;
149 return $servicesAsParametersKeys;
153 * @return \Twig_SimpleFunction
155 public function getArgumentsFromRoute()
157 $argumentsFromRoute = new \Twig_SimpleFunction(
158 'argumentsFromRoute', function ($route) {
160 preg_match_all('/{(.*?)}/', $route, $returnValues);
162 $returnValues = array_map(
164 return sprintf('$%s', $value);
168 return $returnValues;
172 return $argumentsFromRoute;
176 * @return \Twig_SimpleFunction
178 public function getServicesClassInitialization()
180 $returnValue = new \Twig_SimpleFunction(
181 'serviceClassInitialization', function ($services) {
183 foreach ($services as $service) {
184 $returnValues[] = sprintf(' $this->%s = $%s;', $service['camel_case_name'], $service['machine_name']);
187 return implode(PHP_EOL, $returnValues);
195 * @return \Twig_SimpleFunction
197 public function getServicesClassInjection()
199 $returnValue = new \Twig_SimpleFunction(
200 'serviceClassInjection', function ($services) {
202 foreach ($services as $service) {
203 $returnValues[] = sprintf(' $container->get(\'%s\')', $service['name']);
206 return implode(','.PHP_EOL, $returnValues);
214 * @return \Twig_SimpleFunction
216 public function getTagsAsArray()
218 $returnValue = new \Twig_SimpleFunction(
219 'tagsAsArray', function ($tags) {
221 foreach ($tags as $key => $value) {
222 $returnValues[] = sprintf('%s: %s', $key, $value);
225 return $returnValues;
233 * @return \Twig_SimpleFunction
235 public function getTranslationAsYamlComment()
237 $returnValue = new \Twig_SimpleFunction(
238 'yaml_comment', function (\Twig_Environment $environment, $context, $key) {
239 $message = $this->translator->trans($key);
240 $messages = explode("\n", $message);
242 foreach ($messages as $message) {
243 $returnValues[] = '# '.$message;
246 $message = implode("\n", $returnValues);
247 $template = $environment->createTemplate($message);
249 return $template->render($context);
251 'needs_environment' => true,
252 'needs_context' => true,
260 * @return \Twig_SimpleFilter
262 public function createMachineName()
264 return new \Twig_SimpleFilter(
265 'machine_name', function ($var) {
266 return $this->stringConverter->createMachineName($var);