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') 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