123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- namespace Acme\DemoBundle\Twig\Extension;
- use CG\Core\ClassUtils;
- class DemoExtension extends \Twig_Extension
- {
- protected $loader;
- protected $controller;
- public function __construct(\Twig_LoaderInterface $loader)
- {
- $this->loader = $loader;
- }
- public function setController($controller)
- {
- $this->controller = $controller;
- }
- /**
- * {@inheritdoc}
- */
- public function getFunctions()
- {
- return array(
- 'code' => new \Twig_Function_Method($this, 'getCode', array('is_safe' => array('html'))),
- );
- }
- public function getCode($template)
- {
- // highlight_string highlights php code only if '<?php' tag is present.
- $controller = highlight_string("<?php" . $this->getControllerCode(), true);
- $controller = str_replace('<span style="color: #0000BB"><?php </span>', ' ', $controller);
- $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8');
- // remove the code block
- $template = str_replace('{% set code = code(_self) %}', '', $template);
- return <<<EOF
- <p><strong>Controller Code</strong></p>
- <pre>$controller</pre>
- <p><strong>Template Code</strong></p>
- <pre>$template</pre>
- 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';
- }
- }
|