Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ed87361

Browse files
committed
[Form] Moved FormHelper creation to TemplatingExtension
1 parent 87ccb6a commit ed87361

File tree

4 files changed

+131
-43
lines changed

4 files changed

+131
-43
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Form\Extension\Templating;
13+
14+
use Symfony\Component\Form\AbstractExtension;
15+
use Symfony\Component\Form\FormRenderer;
16+
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
17+
use Symfony\Component\Templating\PhpEngine;
18+
19+
/**
20+
* Integrates the Templating component with the Form library.
21+
*
22+
* @author Bernhard Schussek <[email protected]>
23+
*/
24+
class TemplatingExtension extends AbstractExtension
25+
{
26+
public function __construct(PhpEngine $engine, CsrfProviderInterface $csrfProvider = null, array $defaultThemes = array())
27+
{
28+
$engine->addHelpers(array(
29+
new FormHelper(new FormRenderer(new TemplatingRendererEngine($engine, $defaultThemes), $csrfProvider))
30+
));
31+
}
32+
}

src/Symfony/Component/Form/Forms.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,54 @@
102102
* ->getFormFactory();
103103
* </code>
104104
*
105+
* Support for the Templating component is provided by TemplatingExtension.
106+
* This extension needs a PhpEngine object for rendering forms. As second
107+
* argument you should pass the names of the default themes. Here is an
108+
* example for using the default layout with "<div>" tags:
109+
*
110+
* <code>
111+
* use Symfony\Component\Form\Extension\Templating\TemplatingExtension;
112+
*
113+
* $formFactory = Forms::createFormFactoryBuilder()
114+
* ->addExtension(new TemplatingExtension($engine, null, array(
115+
* 'FrameworkBundle:Form',
116+
* )))
117+
* ->getFormFactory();
118+
* </code>
119+
*
120+
* The next example shows how to include the "<table>" layout:
121+
*
122+
* <code>
123+
* use Symfony\Component\Form\Extension\Templating\TemplatingExtension;
124+
*
125+
* $formFactory = Forms::createFormFactoryBuilder()
126+
* ->addExtension(new TemplatingExtension($engine, null, array(
127+
* 'FrameworkBundle:Form',
128+
* 'FrameworkBundle:FormTable',
129+
* )))
130+
* ->getFormFactory();
131+
* </code>
132+
*
133+
* If you also loaded the CsrfExtension, you should pass the CSRF provider
134+
* to the extension so that you can render CSRF tokens in your templates
135+
* more easily:
136+
*
137+
* <code>
138+
* use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
139+
* use Symfony\Component\Form\Extension\Csrf\CsrfProvider\DefaultCsrfProvider;
140+
* use Symfony\Component\Form\Extension\Templating\TemplatingExtension;
141+
*
142+
*
143+
* $secret = 'V8a5Z97e...';
144+
* $csrfProvider = new DefaultCsrfProvider($secret);
145+
* $formFactory = Forms::createFormFactoryBuilder()
146+
* ->addExtension(new CsrfExtension($csrfProvider))
147+
* ->addExtension(new TemplatingExtension($engine, $csrfProvider, array(
148+
* 'FrameworkBundle:Form',
149+
* )))
150+
* ->getFormFactory();
151+
* </code>
152+
*
105153
* @author Bernhard Schussek <[email protected]>
106154
*/
107155
final class Forms

src/Symfony/Component/Form/Tests/Extension/Templating/FormHelperDivLayoutTest.php

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
namespace Symfony\Component\Form\Tests\Extension\Templating;
1313

1414
use Symfony\Component\Form\FormView;
15-
use Symfony\Component\Form\FormRenderer;
16-
use Symfony\Component\Form\Extension\Templating\FormHelper;
17-
use Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine;
15+
use Symfony\Component\Form\Extension\Templating\TemplatingExtension;
1816
use Symfony\Component\Form\Tests\AbstractDivLayoutTest;
1917
use Symfony\Component\Form\Tests\Extension\Templating\Fixtures\StubTemplateNameParser;
2018
use Symfony\Component\Form\Tests\Extension\Templating\Fixtures\StubTranslator;
@@ -26,7 +24,10 @@
2624

2725
class FormHelperDivLayoutTest extends AbstractDivLayoutTest
2826
{
29-
protected $helper;
27+
/**
28+
* @var PhpEngine
29+
*/
30+
protected $engine;
3031

3132
protected function setUp()
3233
{
@@ -39,65 +40,69 @@ protected function setUp()
3940
}
4041

4142
parent::setUp();
43+
}
4244

45+
protected function getExtensions()
46+
{
4347
// should be moved to the Form component once absolute file paths are supported
4448
// by the default name parser in the Templating component
4549
$reflClass = new \ReflectionClass('Symfony\Bundle\FrameworkBundle\FrameworkBundle');
4650
$root = realpath(dirname($reflClass->getFileName()) . '/Resources/views');
4751
$rootTheme = realpath(__DIR__.'/Resources');
4852
$templateNameParser = new StubTemplateNameParser($root, $rootTheme);
4953
$loader = new FilesystemLoader(array());
50-
$engine = new PhpEngine($templateNameParser, $loader);
51-
$engine->addGlobal('global', '');
52-
$rendererEngine = new TemplatingRendererEngine($engine, array('FrameworkBundle:Form'));
53-
$renderer = new FormRenderer($rendererEngine, $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface'));
54-
55-
$this->helper = new FormHelper($renderer);
5654

57-
$engine->setHelpers(array(
58-
$this->helper,
55+
$this->engine = new PhpEngine($templateNameParser, $loader);
56+
$this->engine->addGlobal('global', '');
57+
$this->engine->setHelpers(array(
5958
new TranslatorHelper(new StubTranslator()),
6059
));
60+
61+
return array_merge(parent::getExtensions(), array(
62+
new TemplatingExtension($this->engine, $this->csrfProvider, array(
63+
'FrameworkBundle:Form',
64+
)),
65+
));
6166
}
6267

6368
protected function tearDown()
6469
{
65-
$this->helper = null;
70+
$this->engine = null;
6671
}
6772

6873
protected function renderEnctype(FormView $view)
6974
{
70-
return (string) $this->helper->enctype($view);
75+
return (string) $this->engine->get('form')->enctype($view);
7176
}
7277

7378
protected function renderLabel(FormView $view, $label = null, array $vars = array())
7479
{
75-
return (string) $this->helper->label($view, $label, $vars);
80+
return (string) $this->engine->get('form')->label($view, $label, $vars);
7681
}
7782

7883
protected function renderErrors(FormView $view)
7984
{
80-
return (string) $this->helper->errors($view);
85+
return (string) $this->engine->get('form')->errors($view);
8186
}
8287

8388
protected function renderWidget(FormView $view, array $vars = array())
8489
{
85-
return (string) $this->helper->widget($view, $vars);
90+
return (string) $this->engine->get('form')->widget($view, $vars);
8691
}
8792

8893
protected function renderRow(FormView $view, array $vars = array())
8994
{
90-
return (string) $this->helper->row($view, $vars);
95+
return (string) $this->engine->get('form')->row($view, $vars);
9196
}
9297

9398
protected function renderRest(FormView $view, array $vars = array())
9499
{
95-
return (string) $this->helper->rest($view, $vars);
100+
return (string) $this->engine->get('form')->rest($view, $vars);
96101
}
97102

98103
protected function setTheme(FormView $view, array $themes)
99104
{
100-
$this->helper->setTheme($view, $themes);
105+
$this->engine->get('form')->setTheme($view, $themes);
101106
}
102107

103108
public static function themeBlockInheritanceProvider()

src/Symfony/Component/Form/Tests/Extension/Templating/FormHelperTableLayoutTest.php

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
namespace Symfony\Component\Form\Tests\Extension\Templating;
1313

1414
use Symfony\Component\Form\FormView;
15-
use Symfony\Component\Form\FormRenderer;
16-
use Symfony\Component\Form\Extension\Templating\FormHelper;
17-
use Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine;
15+
use Symfony\Component\Form\Extension\Templating\TemplatingExtension;
1816
use Symfony\Component\Form\Tests\AbstractTableLayoutTest;
1917
use Symfony\Component\Form\Tests\Extension\Templating\Fixtures\StubTemplateNameParser;
2018
use Symfony\Component\Form\Tests\Extension\Templating\Fixtures\StubTranslator;
@@ -26,7 +24,10 @@
2624

2725
class FormHelperTableLayoutTest extends AbstractTableLayoutTest
2826
{
29-
protected $helper;
27+
/**
28+
* @var PhpEngine
29+
*/
30+
protected $engine;
3031

3132
protected function setUp()
3233
{
@@ -39,67 +40,69 @@ protected function setUp()
3940
}
4041

4142
parent::setUp();
43+
}
4244

45+
protected function getExtensions()
46+
{
4347
// should be moved to the Form component once absolute file paths are supported
4448
// by the default name parser in the Templating component
4549
$reflClass = new \ReflectionClass('Symfony\Bundle\FrameworkBundle\FrameworkBundle');
4650
$root = realpath(dirname($reflClass->getFileName()) . '/Resources/views');
4751
$rootTheme = realpath(__DIR__.'/Resources');
4852
$templateNameParser = new StubTemplateNameParser($root, $rootTheme);
4953
$loader = new FilesystemLoader(array());
50-
$engine = new PhpEngine($templateNameParser, $loader);
51-
$engine->addGlobal('global', '');
52-
$rendererEngine = new TemplatingRendererEngine($engine, array(
53-
'FrameworkBundle:Form',
54-
'FrameworkBundle:FormTable'
55-
));
56-
$renderer = new FormRenderer($rendererEngine, $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface'));
5754

58-
$this->helper = new FormHelper($renderer);
59-
60-
$engine->setHelpers(array(
61-
$this->helper,
55+
$this->engine = new PhpEngine($templateNameParser, $loader);
56+
$this->engine->addGlobal('global', '');
57+
$this->engine->setHelpers(array(
6258
new TranslatorHelper(new StubTranslator()),
6359
));
60+
61+
return array_merge(parent::getExtensions(), array(
62+
new TemplatingExtension($this->engine, $this->csrfProvider, array(
63+
'FrameworkBundle:Form',
64+
'FrameworkBundle:FormTable',
65+
)),
66+
));
6467
}
6568

6669
protected function tearDown()
6770
{
68-
$this->helper = null;
71+
$this->engine = null;
6972
}
7073

7174
protected function renderEnctype(FormView $view)
7275
{
73-
return (string) $this->helper->enctype($view);
76+
return (string) $this->engine->get('form')->enctype($view);
7477
}
7578

7679
protected function renderLabel(FormView $view, $label = null, array $vars = array())
7780
{
78-
return (string) $this->helper->label($view, $label, $vars);
81+
return (string) $this->engine->get('form')->label($view, $label, $vars);
7982
}
8083

8184
protected function renderErrors(FormView $view)
8285
{
83-
return (string) $this->helper->errors($view);
86+
return (string) $this->engine->get('form')->errors($view);
8487
}
8588

8689
protected function renderWidget(FormView $view, array $vars = array())
8790
{
88-
return (string) $this->helper->widget($view, $vars);
91+
return (string) $this->engine->get('form')->widget($view, $vars);
8992
}
9093

9194
protected function renderRow(FormView $view, array $vars = array())
9295
{
93-
return (string) $this->helper->row($view, $vars);
96+
return (string) $this->engine->get('form')->row($view, $vars);
9497
}
9598

9699
protected function renderRest(FormView $view, array $vars = array())
97100
{
98-
return (string) $this->helper->rest($view, $vars);
101+
return (string) $this->engine->get('form')->rest($view, $vars);
99102
}
100103

101104
protected function setTheme(FormView $view, array $themes)
102105
{
103-
$this->helper->setTheme($view, $themes);
106+
$this->engine->get('form')->setTheme($view, $themes);
104107
}
105108
}

0 commit comments

Comments
 (0)