From 93fd4692f6eb753cae16358131c8049d84cfbb41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20L=C5=93uillet?=
Date: Thu, 22 Jan 2015 08:30:07 +0100
Subject: symfony is there
---
.../DemoBundle/Twig/Extension/DemoExtension.php | 81 ++++++++++++++++++++++
1 file changed, 81 insertions(+)
create mode 100644 src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
(limited to 'src/Acme/DemoBundle/Twig/Extension/DemoExtension.php')
diff --git a/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
new file mode 100644
index 00000000..e6ce94f6
--- /dev/null
+++ b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
@@ -0,0 +1,81 @@
+loader = $loader;
+ }
+
+ public function setController($controller)
+ {
+ $this->controller = $controller;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFunctions()
+ {
+ return array(
+ new \Twig_SimpleFunction('code', array($this, 'getCode'), array('is_safe' => array('html'))),
+ );
+ }
+
+ public function getCode($template)
+ {
+ // highlight_string highlights php code only if 'getControllerCode(), true);
+ $controller = str_replace('<?php ', ' ', $controller);
+
+ $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8');
+
+ // remove the code block
+ $template = str_replace('{% set code = code(_self) %}', '', $template);
+
+ return <<Controller Code
+$controller
+
+Template Code
+$template
+EOF;
+ }
+
+ protected function getControllerCode()
+ {
+ $class = get_class($this->controller[0]);
+ if (class_exists('CG\Core\ClassUtils')) {
+ $class = ClassUtils::getUserClass($class);
+ }
+
+ $r = new \ReflectionClass($class);
+ $m = $r->getMethod($this->controller[1]);
+
+ $code = file($r->getFilename());
+
+ return ' '.$m->getDocComment()."\n".implode('', array_slice($code, $m->getStartline() - 1, $m->getEndLine() - $m->getStartline() + 1));
+ }
+
+ protected function getTemplateCode($template)
+ {
+ return $this->loader->getSource($template->getTemplateName());
+ }
+
+ /**
+ * Returns the name of the extension.
+ *
+ * @return string The extension name
+ */
+ public function getName()
+ {
+ return 'demo';
+ }
+}
--
cgit v1.2.3