-
Notifications
You must be signed in to change notification settings - Fork 263
/
Copy pathFormExtension.php
78 lines (69 loc) · 1.96 KB
/
FormExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/*
* This file is part of the GenemuFormBundle package.
*
* (c) Olivier Chauvel <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Genemu\Bundle\FormBundle\Twig\Extension;
use Symfony\Component\Form\FormView;
use Symfony\Bridge\Twig\Form\TwigRendererInterface;
/**
* FormExtension extends Twig with form capabilities.
*
* @author Olivier Chauvel <[email protected]>
*/
class FormExtension extends \Twig_Extension
{
/**
* This property is public so that it can be accessed directly from compiled
* templates without having to call a getter, which slightly decreases performance.
*
* @var \Symfony\Component\Form\FormRendererInterface
*/
public $renderer;
/**
* Constructs.
*
* @param TwigRendererInterface $renderer
*/
public function __construct(TwigRendererInterface $renderer)
{
$this->renderer = $renderer;
}
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('form_javascript', array($this, 'renderJavascript'), array('is_safe' => array('html'))),
new \Twig_SimpleFunction('form_stylesheet', null, array(
'is_safe' => array('html'),
'node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode',
)),
);
}
/**
* Render Function Form Javascript
*
* @param FormView $view
* @param bool $prototype
*
* @return string
*/
public function renderJavascript(FormView $view, $prototype = false)
{
$block = $prototype ? 'javascript_prototype' : 'javascript';
return $this->renderer->searchAndRenderBlock($view, $block);
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'genemu.twig.extension.form';
}
}