123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
-
- namespace Acme\DemoBundle\Twig\Extension;
-
- use Symfony\Component\HttpKernel\KernelInterface;
- use Symfony\Bundle\TwigBundle\Loader\FilesystemLoader;
-
- class DemoExtension extends \Twig_Extension
- {
- protected $loader;
- protected $controller;
-
- public function __construct(FilesystemLoader $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)
- {
- $controller = htmlspecialchars($this->getControllerCode(), ENT_QUOTES, 'UTF-8');
- $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()
- {
- $r = new \ReflectionClass($this->controller[0]);
- $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';
- }
- }
|