Updated vendors
This commit is contained in:
parent
b82b4ffd34
commit
b9e6708ffd
60
vendor/composer/installed.json
vendored
60
vendor/composer/installed.json
vendored
@ -3,7 +3,7 @@
|
||||
"name": "jms/metadata",
|
||||
"version": "1.1.1",
|
||||
"version_normalized": "1.1.1.0",
|
||||
"time": "2011-12-29 14:32:49",
|
||||
"time": "2011-12-29 12:32:49",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/metadata",
|
||||
@ -47,7 +47,7 @@
|
||||
"name": "jms/cg",
|
||||
"version": "1.0.0",
|
||||
"version_normalized": "1.0.0.0",
|
||||
"time": "2011-12-29 13:40:52",
|
||||
"time": "2011-12-29 11:40:52",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/schmittjoh/cg-library.git",
|
||||
@ -89,7 +89,7 @@
|
||||
"version": "1.0.0",
|
||||
"version_normalized": "1.0.0.0",
|
||||
"target-dir": "JMS/AopBundle",
|
||||
"time": "2011-12-29 13:50:26",
|
||||
"time": "2011-12-29 11:50:26",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/JMSAopBundle",
|
||||
@ -133,7 +133,7 @@
|
||||
"version": "1.1.0",
|
||||
"version_normalized": "1.1.0.0",
|
||||
"target-dir": "JMS/SecurityExtraBundle",
|
||||
"time": "2011-12-29 17:38:12",
|
||||
"time": "2011-12-29 15:38:12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/JMSSecurityExtraBundle",
|
||||
@ -178,7 +178,7 @@
|
||||
"version": "1.0.1",
|
||||
"version_normalized": "1.0.1.0",
|
||||
"target-dir": "JMS/DiExtraBundle",
|
||||
"time": "2012-02-24 09:01:54",
|
||||
"time": "2012-02-24 07:01:54",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/JMSDiExtraBundle",
|
||||
@ -221,7 +221,7 @@
|
||||
"name": "doctrine/common",
|
||||
"version": "2.2.2",
|
||||
"version_normalized": "2.2.2.0",
|
||||
"time": "2012-04-06 11:46:44",
|
||||
"time": "2012-04-06 07:46:44",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/common",
|
||||
@ -287,7 +287,7 @@
|
||||
"name": "monolog/monolog",
|
||||
"version": "1.1.0",
|
||||
"version_normalized": "1.1.0.0",
|
||||
"time": "2012-04-16 22:27:40",
|
||||
"time": "2012-04-16 18:27:40",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
@ -337,7 +337,7 @@
|
||||
"name": "twig/extensions",
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"time": "2012-05-15 05:28:19",
|
||||
"time": "2012-05-15 01:28:19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fabpot/Twig-extensions",
|
||||
@ -383,7 +383,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Doctrine/Bundle/DoctrineBundle",
|
||||
"time": "2012-07-01 18:42:17",
|
||||
"time": "2012-07-01 14:42:17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/doctrine/DoctrineBundle.git",
|
||||
@ -457,7 +457,7 @@
|
||||
"name": "doctrine/orm",
|
||||
"version": "2.2.x-dev",
|
||||
"version_normalized": "2.2.9999999.9999999-dev",
|
||||
"time": "2012-07-05 15:48:00",
|
||||
"time": "2012-07-05 11:48:00",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/doctrine/doctrine2.git",
|
||||
@ -522,7 +522,7 @@
|
||||
"name": "doctrine/dbal",
|
||||
"version": "2.2.x-dev",
|
||||
"version_normalized": "2.2.9999999.9999999-dev",
|
||||
"time": "2012-07-07 02:30:35",
|
||||
"time": "2012-07-06 22:30:35",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal",
|
||||
@ -588,7 +588,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Sensio/Bundle/GeneratorBundle",
|
||||
"time": "2012-07-12 08:04:48",
|
||||
"time": "2012-07-12 04:04:48",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensio/SensioGeneratorBundle",
|
||||
@ -641,7 +641,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Symfony/Bundle/MonologBundle",
|
||||
"time": "2012-06-29 13:48:07",
|
||||
"time": "2012-06-29 09:48:07",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/MonologBundle",
|
||||
@ -701,7 +701,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Sensio/Bundle/FrameworkExtraBundle",
|
||||
"time": "2012-07-11 07:13:52",
|
||||
"time": "2012-07-11 03:13:52",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensio/SensioFrameworkExtraBundle",
|
||||
@ -750,7 +750,7 @@
|
||||
"name": "swiftmailer/swiftmailer",
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"time": "2012-07-12 20:47:17",
|
||||
"time": "2012-07-12 16:47:17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/swiftmailer/swiftmailer.git",
|
||||
@ -806,7 +806,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Sensio/Bundle/DistributionBundle",
|
||||
"time": "2012-07-14 18:24:10",
|
||||
"time": "2012-07-14 14:24:10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensio/SensioDistributionBundle",
|
||||
@ -850,7 +850,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Symfony/Bundle/SwiftmailerBundle",
|
||||
"time": "2012-07-19 01:55:12",
|
||||
"time": "2012-07-18 21:55:12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/SwiftmailerBundle",
|
||||
@ -909,7 +909,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Ivory/CKEditorBundle",
|
||||
"time": "2012-05-28 11:16:47",
|
||||
"time": "2012-05-28 07:16:47",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/egeloen/IvoryCKEditorBundle",
|
||||
@ -952,7 +952,7 @@
|
||||
"name": "kriswallsmith/assetic",
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"time": "2012-07-20 10:33:33",
|
||||
"time": "2012-07-20 06:33:33",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/kriswallsmith/assetic.git",
|
||||
@ -1012,7 +1012,7 @@
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"target-dir": "Symfony/Bundle/AsseticBundle",
|
||||
"time": "2012-07-20 19:34:07",
|
||||
"time": "2012-07-20 15:34:07",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/AsseticBundle",
|
||||
@ -1067,16 +1067,16 @@
|
||||
"name": "twig/twig",
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"time": "2012-07-20 12:41:38",
|
||||
"time": "2012-07-22 08:32:58",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/fabpot/Twig.git",
|
||||
"reference": "8a84838798e45424c5fe2d87149db6855ae037bf"
|
||||
"reference": "657de7bdeb680815e0df95f63da9f81e1533d2ea"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/fabpot/Twig/zipball/8a84838798e45424c5fe2d87149db6855ae037bf",
|
||||
"reference": "8a84838798e45424c5fe2d87149db6855ae037bf",
|
||||
"url": "https://github.com/fabpot/Twig/zipball/657de7bdeb680815e0df95f63da9f81e1533d2ea",
|
||||
"reference": "657de7bdeb680815e0df95f63da9f81e1533d2ea",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1121,22 +1121,22 @@
|
||||
"name": "symfony/symfony",
|
||||
"version": "dev-master",
|
||||
"version_normalized": "9999999-dev",
|
||||
"time": "2012-07-21 11:16:18",
|
||||
"time": "2012-07-22 06:03:04",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/symfony/symfony.git",
|
||||
"reference": "6c256b01b087f94a4ec04487d875fe81375eb6c1"
|
||||
"reference": "c20c1d18dc0b588e10a8fab24264441f0e4a3e7c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/symfony/symfony/zipball/6c256b01b087f94a4ec04487d875fe81375eb6c1",
|
||||
"reference": "6c256b01b087f94a4ec04487d875fe81375eb6c1",
|
||||
"url": "https://github.com/symfony/symfony/zipball/c20c1d18dc0b588e10a8fab24264441f0e4a3e7c",
|
||||
"reference": "c20c1d18dc0b588e10a8fab24264441f0e4a3e7c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"twig/twig": ">=1.8,<2.0-dev",
|
||||
"doctrine/common": ">2.2,<2.4-dev",
|
||||
"php": ">=5.3.3"
|
||||
"php": ">=5.3.3",
|
||||
"twig/twig": ">=1.9.1,<2.0-dev"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/doctrine-bridge": "self.version",
|
||||
|
116
vendor/symfony/symfony/UPGRADE-2.1.md
vendored
116
vendor/symfony/symfony/UPGRADE-2.1.md
vendored
@ -224,30 +224,23 @@
|
||||
`buildViewBottomUp()` in `FormTypeInterface` and `FormTypeExtensionInterface`.
|
||||
Furthermore, `buildViewBottomUp()` was renamed to `finishView()`. At last,
|
||||
all methods in these types now receive instances of `FormBuilderInterface`
|
||||
and `FormViewInterface` where they received instances of `FormBuilder` and
|
||||
`FormView` before. You need to change the method signatures in your
|
||||
form types and extensions as shown below.
|
||||
where they received instances of `FormBuilder` before. You need to change the
|
||||
method signatures in your form types and extensions as shown below.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Form\FormBuilder;
|
||||
use Symfony\Component\Form\FormView;
|
||||
|
||||
public function buildForm(FormBuilder $builder, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form)
|
||||
public function buildViewBottomUp(FormView $view, FormInterface $form)
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
```
|
||||
|
||||
* The method `createBuilder` was removed from `FormTypeInterface` for performance
|
||||
@ -383,41 +376,6 @@
|
||||
If address is an object in this case, the code given in "Before"
|
||||
works without changes.
|
||||
|
||||
* The methods in class `FormView` were renamed to match the naming used in
|
||||
`Form` and `FormBuilder`. The following list shows the old names on the
|
||||
left and the new names on the right:
|
||||
|
||||
* `set`: `setVar`
|
||||
* `has`: `hasVar`
|
||||
* `get`: `getVar`
|
||||
* `all`: `getVars`
|
||||
* `addChild`: `add`
|
||||
* `getChild`: `get`
|
||||
* `getChildren`: `all`
|
||||
* `removeChild`: `remove`
|
||||
* `hasChild`: `has`
|
||||
|
||||
The new method `addVars` was added to make the definition of multiple
|
||||
variables at once more convenient.
|
||||
|
||||
The method `hasChildren` was deprecated. You should use `count` instead.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
$view->set('help', 'A text longer than six characters');
|
||||
$view->set('error_class', 'max_length_error');
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
$view->addVars(array(
|
||||
'help' => 'A text longer than six characters',
|
||||
'error_class' => 'max_length_error',
|
||||
));
|
||||
```
|
||||
|
||||
* Form and field names must now start with a letter, digit or underscore
|
||||
and only contain letters, digits, underscores, hyphens and colons.
|
||||
|
||||
@ -601,6 +559,22 @@
|
||||
{% endblock %}
|
||||
```
|
||||
|
||||
* The method `renderBlock()` of the helper for the PHP Templating component was
|
||||
renamed to `block()`. Its first argument is now expected to be a `FormView`
|
||||
instance.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
<?php echo $view['form']->renderBlock('widget_attributes') ?>
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
```
|
||||
|
||||
#### Other BC Breaks
|
||||
|
||||
* The order of the first two arguments of the methods `createNamed` and
|
||||
@ -1054,19 +1028,65 @@
|
||||
$registry->addType($registry->resolveType(new MyFormType()));
|
||||
```
|
||||
|
||||
* The method `renderBlock()` of the helper for the PHP Templating component was
|
||||
deprecated and will be removed in Symfony 2.3. You should use `block()` instead.
|
||||
* The following methods in class `FormView` were deprecated and will be
|
||||
removed in Symfony 2.3:
|
||||
|
||||
* `set`
|
||||
* `has`
|
||||
* `get`
|
||||
* `all`
|
||||
* `getVars`
|
||||
* `addChild`
|
||||
* `getChild`
|
||||
* `getChildren`
|
||||
* `removeChild`
|
||||
* `hasChild`
|
||||
* `hasChildren`
|
||||
* `getParent`
|
||||
* `hasParent`
|
||||
* `setParent`
|
||||
|
||||
You should access the public properties `vars`, `children` and `parent`
|
||||
instead.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
<?php echo $view['form']->renderBlock('widget_attributes') ?>
|
||||
$view->set('help', 'A text longer than six characters');
|
||||
$view->set('error_class', 'max_length_error');
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'help' => 'A text longer than six characters',
|
||||
'error_class' => 'max_length_error',
|
||||
));
|
||||
```
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
echo $view->get('error_class');
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
echo $view->vars['error_class'];
|
||||
```
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
if ($view->hasChildren()) { ...
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
if (count($view->children)) { ...
|
||||
```
|
||||
|
||||
### Validator
|
||||
|
2
vendor/symfony/symfony/composer.json
vendored
2
vendor/symfony/symfony/composer.json
vendored
@ -18,7 +18,7 @@
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"doctrine/common": ">2.2,<2.4-dev",
|
||||
"twig/twig": ">=1.8,<2.0-dev"
|
||||
"twig/twig": ">=1.9.1,<2.0-dev"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/doctrine-bridge": "self.version",
|
||||
|
@ -124,7 +124,7 @@ class EntityTypeTest extends TypeTestCase
|
||||
'property' => 'name'
|
||||
));
|
||||
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->getVar('choices'));
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->vars['choices']);
|
||||
}
|
||||
|
||||
public function testSetDataToUninitializedEntityWithNonRequiredToString()
|
||||
@ -140,7 +140,7 @@ class EntityTypeTest extends TypeTestCase
|
||||
'required' => false,
|
||||
));
|
||||
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->getVar('choices'));
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->vars['choices']);
|
||||
}
|
||||
|
||||
public function testSetDataToUninitializedEntityWithNonRequiredQueryBuilder()
|
||||
@ -159,7 +159,7 @@ class EntityTypeTest extends TypeTestCase
|
||||
'query_builder' => $qb
|
||||
));
|
||||
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->getVar('choices'));
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->vars['choices']);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -503,7 +503,7 @@ class EntityTypeTest extends TypeTestCase
|
||||
|
||||
$field->bind('2');
|
||||
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->getVar('choices'));
|
||||
$this->assertEquals(array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')), $field->createView()->vars['choices']);
|
||||
$this->assertTrue($field->isSynchronized());
|
||||
$this->assertSame($entity2, $field->getData());
|
||||
$this->assertSame('2', $field->getClientData());
|
||||
@ -533,7 +533,7 @@ class EntityTypeTest extends TypeTestCase
|
||||
'Group1' => array(1 => new ChoiceView('1', 'Foo'), 2 => new ChoiceView('2', 'Bar')),
|
||||
'Group2' => array(3 => new ChoiceView('3', 'Baz')),
|
||||
'4' => new ChoiceView('4', 'Boo!')
|
||||
), $field->createView()->getVar('choices'));
|
||||
), $field->createView()->vars['choices']);
|
||||
}
|
||||
|
||||
public function testDisallowChoicesThatAreNotIncluded_choicesSingleIdentifier()
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Bridge\Twig\Extension;
|
||||
|
||||
use Symfony\Bridge\Twig\TokenParser\FormThemeTokenParser;
|
||||
use Symfony\Bridge\Twig\Form\TwigRendererInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
||||
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
|
||||
|
||||
/**
|
||||
@ -62,15 +62,13 @@ class FormExtension extends \Twig_Extension
|
||||
public function getFunctions()
|
||||
{
|
||||
return array(
|
||||
'form_enctype' => new \Twig_Function_Method($this, 'renderer->renderEnctype', array('is_safe' => array('html'))),
|
||||
'form_widget' => new \Twig_Function_Method($this, 'renderer->renderWidget', array('is_safe' => array('html'))),
|
||||
'form_errors' => new \Twig_Function_Method($this, 'renderer->renderErrors', array('is_safe' => array('html'))),
|
||||
'form_label' => new \Twig_Function_Method($this, 'renderer->renderLabel', array('is_safe' => array('html'))),
|
||||
'form_row' => new \Twig_Function_Method($this, 'renderer->renderRow', array('is_safe' => array('html'))),
|
||||
'form_rest' => new \Twig_Function_Method($this, 'renderer->renderRest', array('is_safe' => array('html'))),
|
||||
'csrf_token' => new \Twig_Function_Method($this, 'renderer->renderCsrfToken'),
|
||||
'_form_is_choice_group' => new \Twig_Function_Method($this, 'renderer->isChoiceGroup', array('is_safe' => array('html'))),
|
||||
'_form_is_choice_selected' => new \Twig_Function_Method($this, 'renderer->isChoiceSelected', array('is_safe' => array('html'))),
|
||||
'form_enctype' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'form_widget' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'form_errors' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'form_label' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'form_row' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'form_rest' => new \Twig_Function_Node('Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', array('is_safe' => array('html'))),
|
||||
'csrf_token' => new \Twig_Function_Method($this, 'renderer->renderCsrfToken'),
|
||||
);
|
||||
}
|
||||
|
||||
@ -84,6 +82,48 @@ class FormExtension extends \Twig_Extension
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getTests()
|
||||
{
|
||||
return array(
|
||||
'selectedchoice' => new \Twig_Test_Method($this, 'isSelectedChoice'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether a choice is selected for a given form value.
|
||||
*
|
||||
* Unfortunately Twig does not support an efficient way to execute the
|
||||
* "is_selected" closure passed to the template by ChoiceType. It is faster
|
||||
* to implement the logic here (around 65ms for a specific form).
|
||||
*
|
||||
* Directly implementing the logic here is also faster than doing so in
|
||||
* ChoiceView (around 30ms).
|
||||
*
|
||||
* The worst option tested so far is to implement the logic in ChoiceView
|
||||
* and access the ChoiceView method directly in the template. Doing so is
|
||||
* around 220ms slower than doing the method call here in the filter. Twig
|
||||
* seems to be much more efficient at executing filters than at executing
|
||||
* methods of an object.
|
||||
*
|
||||
* @param ChoiceView $choice The choice to check.
|
||||
* @param string|array $selectedValue The selected value to compare.
|
||||
*
|
||||
* @return Boolean Whether the choice is selected.
|
||||
*
|
||||
* @see ChoiceView::isSelected()
|
||||
*/
|
||||
public function isSelectedChoice(ChoiceView $choice, $selectedValue)
|
||||
{
|
||||
if (is_array($selectedValue)) {
|
||||
return false !== array_search($choice->value, $selectedValue, true);
|
||||
}
|
||||
|
||||
return $choice->value === $selectedValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace Symfony\Bridge\Twig\Form;
|
||||
|
||||
use Symfony\Component\Form\AbstractRendererEngine;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
@ -40,9 +40,9 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderBlock(FormViewInterface $view, $resource, $block, array $variables = array())
|
||||
public function renderBlock(FormView $view, $resource, $blockName, array $variables = array())
|
||||
{
|
||||
$cacheKey = $view->getVar(self::CACHE_KEY_VAR);
|
||||
$cacheKey = $view->vars[self::CACHE_KEY_VAR];
|
||||
|
||||
$context = $this->environment->mergeGlobals($variables);
|
||||
|
||||
@ -55,7 +55,7 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
|
||||
// We do not call renderBlock here to avoid too many nested level calls
|
||||
// (XDebug limits the level to 100 by default)
|
||||
$this->template->displayBlock($block, $context, $this->resources[$cacheKey]);
|
||||
$this->template->displayBlock($blockName, $context, $this->resources[$cacheKey]);
|
||||
|
||||
return ob_get_clean();
|
||||
}
|
||||
@ -70,13 +70,13 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
*
|
||||
* @see getResourceForBlock()
|
||||
*
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormViewInterface $view The form view for finding the applying themes.
|
||||
* @param string $block The name of the block to load.
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormView $view The form view for finding the applying themes.
|
||||
* @param string $blockName The name of the block to load.
|
||||
*
|
||||
* @return Boolean True if the resource could be loaded, false otherwise.
|
||||
*/
|
||||
protected function loadResourceForBlock($cacheKey, FormViewInterface $view, $block)
|
||||
protected function loadResourceForBlockName($cacheKey, FormView $view, $blockName)
|
||||
{
|
||||
// The caller guarantees that $this->resources[$cacheKey][$block] is
|
||||
// not set, but it doesn't have to check whether $this->resources[$cacheKey]
|
||||
@ -86,7 +86,7 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
// As said in the previous, the caller guarantees that
|
||||
// $this->resources[$cacheKey][$block] is not set. Since the themes are
|
||||
// already loaded, it can only be a non-existing block.
|
||||
$this->resources[$cacheKey][$block] = false;
|
||||
$this->resources[$cacheKey][$blockName] = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -105,7 +105,7 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
}
|
||||
|
||||
// Check the default themes once we reach the root view without success
|
||||
if (!$view->hasParent()) {
|
||||
if (!$view->parent) {
|
||||
for ($i = count($this->defaultThemes) - 1; $i >= 0; --$i) {
|
||||
$this->loadResourcesFromTheme($cacheKey, $this->defaultThemes[$i]);
|
||||
// CONTINUE LOADING (see doc comment)
|
||||
@ -113,29 +113,29 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
||||
}
|
||||
|
||||
// Proceed with the themes of the parent view
|
||||
if ($view->hasParent()) {
|
||||
$parentCacheKey = $view->getParent()->getVar(self::CACHE_KEY_VAR);
|
||||
if ($view->parent) {
|
||||
$parentCacheKey = $view->parent->vars[self::CACHE_KEY_VAR];
|
||||
|
||||
if (!isset($this->resources[$parentCacheKey])) {
|
||||
$this->loadResourceForBlock($parentCacheKey, $view->getParent(), $block);
|
||||
$this->loadResourceForBlockName($parentCacheKey, $view->parent, $blockName);
|
||||
}
|
||||
|
||||
// EAGER CACHE POPULATION (see doc comment)
|
||||
foreach ($this->resources[$parentCacheKey] as $blockName => $resource) {
|
||||
if (!isset($this->resources[$cacheKey][$blockName])) {
|
||||
$this->resources[$cacheKey][$blockName] = $resource;
|
||||
foreach ($this->resources[$parentCacheKey] as $nestedBlockName => $resource) {
|
||||
if (!isset($this->resources[$cacheKey][$nestedBlockName])) {
|
||||
$this->resources[$cacheKey][$nestedBlockName] = $resource;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Even though we loaded the themes, it can happen that none of them
|
||||
// contains the searched block
|
||||
if (!isset($this->resources[$cacheKey][$block])) {
|
||||
if (!isset($this->resources[$cacheKey][$blockName])) {
|
||||
// Cache that we didn't find anything to speed up further accesses
|
||||
$this->resources[$cacheKey][$block] = false;
|
||||
$this->resources[$cacheKey][$blockName] = false;
|
||||
}
|
||||
|
||||
return false !== $this->resources[$cacheKey][$block];
|
||||
return false !== $this->resources[$cacheKey][$blockName];
|
||||
}
|
||||
|
||||
/**
|
||||
|
56
vendor/symfony/symfony/src/Symfony/Bridge/Twig/Node/SearchAndRenderBlockNode.php
vendored
Normal file
56
vendor/symfony/symfony/src/Symfony/Bridge/Twig/Node/SearchAndRenderBlockNode.php
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\Twig\Node;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class SearchAndRenderBlockNode extends \Twig_Node_Expression_Function
|
||||
{
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
$compiler->raw('$this->env->getExtension(\'form\')->renderer->searchAndRenderBlock(');
|
||||
|
||||
preg_match('/_([^_]+)$/', $this->getAttribute('name'), $matches);
|
||||
|
||||
$label = null;
|
||||
$arguments = iterator_to_array($this->getNode('arguments'));
|
||||
$blockNameSuffix = $matches[1];
|
||||
|
||||
if (isset($arguments[0])) {
|
||||
$compiler->subcompile($arguments[0]);
|
||||
$compiler->raw(', \'' . $blockNameSuffix . '\'');
|
||||
|
||||
if (isset($arguments[1])) {
|
||||
$compiler->raw(', ');
|
||||
|
||||
// The "label" function allows one extra argument here, the label
|
||||
if ('label' === $blockNameSuffix) {
|
||||
if (isset($arguments[2])) {
|
||||
$compiler->subcompile($arguments[2]);
|
||||
$compiler->raw(' + ');
|
||||
}
|
||||
|
||||
// Add the label to the variable array
|
||||
$compiler->raw('array(\'label\' => ');
|
||||
$compiler->subcompile($arguments[1]);
|
||||
$compiler->raw(')');
|
||||
} else {
|
||||
$compiler->subcompile($arguments[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$compiler->raw(")");
|
||||
}
|
||||
}
|
@ -86,15 +86,14 @@
|
||||
|
||||
{% block choice_widget_options %}
|
||||
{% spaceless %}
|
||||
{% for index, choice in options %}
|
||||
{% if _form_is_choice_group(choice) %}
|
||||
<optgroup label="{{ index|trans({}, translation_domain) }}">
|
||||
{% for nested_choice in choice %}
|
||||
<option value="{{ nested_choice.value }}"{% if _form_is_choice_selected(form, nested_choice) %} selected="selected"{% endif %}>{{ nested_choice.label|trans({}, translation_domain) }}</option>
|
||||
{% endfor %}
|
||||
{% for group_label, choice in options %}
|
||||
{% if choice is iterable %}
|
||||
<optgroup label="{{ group_label|trans({}, translation_domain) }}">
|
||||
{% set options = choice %}
|
||||
{{ block('choice_widget_options') }}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ choice.value }}"{% if _form_is_choice_selected(form, choice) %} selected="selected"{% endif %}>{{ choice.label|trans({}, translation_domain) }}</option>
|
||||
<option value="{{ choice.value }}"{% if choice is selectedchoice(value) %} selected="selected"{% endif %}>{{ choice.label|trans({}, translation_domain) }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endspaceless %}
|
||||
|
@ -18,6 +18,7 @@ use Symfony\Bridge\Twig\Extension\TranslationExtension;
|
||||
use Symfony\Bridge\Twig\Tests\Extension\Fixtures\StubTranslator;
|
||||
use Symfony\Bridge\Twig\Tests\Extension\Fixtures\StubFilesystemLoader;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
||||
use Symfony\Component\Form\Tests\AbstractDivLayoutTest;
|
||||
|
||||
class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
||||
@ -105,34 +106,71 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
||||
);
|
||||
}
|
||||
|
||||
public function isSelectedChoiceProvider()
|
||||
{
|
||||
// The commented cases should not be necessary anymore, because the
|
||||
// choice lists should assure that both values passed here are always
|
||||
// strings
|
||||
return array(
|
||||
// array(true, 0, 0),
|
||||
array(true, '0', '0'),
|
||||
array(true, '1', '1'),
|
||||
// array(true, false, 0),
|
||||
// array(true, true, 1),
|
||||
array(true, '', ''),
|
||||
// array(true, null, ''),
|
||||
array(true, '1.23', '1.23'),
|
||||
array(true, 'foo', 'foo'),
|
||||
array(true, 'foo10', 'foo10'),
|
||||
array(true, 'foo', array(1, 'foo', 'foo10')),
|
||||
|
||||
array(false, 10, array(1, 'foo', 'foo10')),
|
||||
array(false, 0, array(1, 'foo', 'foo10')),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider isSelectedChoiceProvider
|
||||
*/
|
||||
public function testIsChoiceSelected($expected, $choice, $value)
|
||||
{
|
||||
$choice = new ChoiceView($choice, $choice . ' label');
|
||||
|
||||
$this->assertSame($expected, $this->extension->isSelectedChoice($choice, $value));
|
||||
}
|
||||
|
||||
protected function renderEnctype(FormView $view)
|
||||
{
|
||||
return (string) $this->extension->renderer->renderEnctype($view);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
|
||||
}
|
||||
|
||||
protected function renderLabel(FormView $view, $label = null, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderLabel($view, $label, $vars);
|
||||
if ($label !== null) {
|
||||
$vars += array('label' => $label);
|
||||
}
|
||||
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'label', $vars);
|
||||
}
|
||||
|
||||
protected function renderErrors(FormView $view)
|
||||
{
|
||||
return (string) $this->extension->renderer->renderErrors($view);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'errors');
|
||||
}
|
||||
|
||||
protected function renderWidget(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderWidget($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'widget', $vars);
|
||||
}
|
||||
|
||||
protected function renderRow(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderRow($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'row', $vars);
|
||||
}
|
||||
|
||||
protected function renderRest(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderRest($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'rest', $vars);
|
||||
}
|
||||
|
||||
protected function setTheme(FormView $view, array $themes)
|
||||
|
@ -77,32 +77,36 @@ class FormExtensionTableLayoutTest extends AbstractTableLayoutTest
|
||||
|
||||
protected function renderEnctype(FormView $view)
|
||||
{
|
||||
return (string) $this->extension->renderer->renderEnctype($view);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
|
||||
}
|
||||
|
||||
protected function renderLabel(FormView $view, $label = null, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderLabel($view, $label, $vars);
|
||||
if ($label !== null) {
|
||||
$vars += array('label' => $label);
|
||||
}
|
||||
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'label', $vars);
|
||||
}
|
||||
|
||||
protected function renderErrors(FormView $view)
|
||||
{
|
||||
return (string) $this->extension->renderer->renderErrors($view);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'errors');
|
||||
}
|
||||
|
||||
protected function renderWidget(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderWidget($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'widget', $vars);
|
||||
}
|
||||
|
||||
protected function renderRow(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderRow($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'row', $vars);
|
||||
}
|
||||
|
||||
protected function renderRest(FormView $view, array $vars = array())
|
||||
{
|
||||
return (string) $this->extension->renderer->renderRest($view, $vars);
|
||||
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'rest', $vars);
|
||||
}
|
||||
|
||||
protected function setTheme(FormView $view, array $themes)
|
||||
|
@ -17,7 +17,7 @@
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"twig/twig": ">=1.8,<2.0-dev"
|
||||
"twig/twig": ">=1.9.1,<2.0-dev"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/form": "2.1.*",
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<input type="checkbox"
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
<?php if ($value): ?> value="<?php echo $view->escape($value) ?>"<?php endif ?>
|
||||
<?php if ($checked): ?> checked="checked"<?php endif ?>
|
||||
/>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('choice_widget_options') ?>
|
||||
<?php echo $view['form']->block($form, 'choice_widget_options') ?>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?php if ($expanded): ?>
|
||||
<?php echo $view['form']->block('choice_widget_expanded') ?>
|
||||
<?php echo $view['form']->block($form, 'choice_widget_expanded') ?>
|
||||
<?php else: ?>
|
||||
<?php echo $view['form']->block('choice_widget_collapsed') ?>
|
||||
<?php echo $view['form']->block($form, 'choice_widget_collapsed') ?>
|
||||
<?php endif ?>
|
||||
|
@ -1,13 +1,13 @@
|
||||
<select
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
<?php if ($multiple): ?> multiple="multiple"<?php endif ?>
|
||||
>
|
||||
<?php if (null !== $empty_value): ?><option value=""><?php echo $view->escape($view['translator']->trans($empty_value, array(), $translation_domain)) ?></option><?php endif; ?>
|
||||
<?php if (count($preferred_choices) > 0): ?>
|
||||
<?php echo $view['form']->block('choice_widget_options', array('options' => $preferred_choices)) ?>
|
||||
<?php echo $view['form']->block($form, 'choice_widget_options', array('choices' => $preferred_choices)) ?>
|
||||
<?php if (count($choices) > 0 && null !== $separator): ?>
|
||||
<option disabled="disabled"><?php echo $separator ?></option>
|
||||
<?php endif ?>
|
||||
<?php endif ?>
|
||||
<?php echo $view['form']->block('choice_widget_options', array('options' => $choices)) ?>
|
||||
<?php echo $view['form']->block($form, 'choice_widget_options', array('choices' => $choices)) ?>
|
||||
</select>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<div <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php foreach ($form as $child): ?>
|
||||
<?php echo $view['form']->widget($child) ?>
|
||||
<?php echo $view['form']->label($child) ?>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?php foreach ($options as $index => $choice): ?>
|
||||
<?php if ($view['form']->isChoiceGroup($choice)): ?>
|
||||
<optgroup label="<?php echo $view->escape($view['translator']->trans($index, array(), $translation_domain)) ?>">
|
||||
<?php foreach ($choice as $nested_choice): ?>
|
||||
<option value="<?php echo $view->escape($nested_choice->getValue()) ?>"<?php if ($view['form']->isChoiceSelected($form, $nested_choice)): ?> selected="selected"<?php endif?>><?php echo $view->escape($view['translator']->trans($nested_choice->getLabel(), array(), $translation_domain)) ?></option>
|
||||
<?php endforeach ?>
|
||||
<?php $translatorHelper = $view['translator']; // outside of the loop for performance reasons! ?>
|
||||
<?php $formHelper = $view['form']; ?>
|
||||
<?php foreach ($choices as $index => $choice): ?>
|
||||
<?php if (is_array($choice)): ?>
|
||||
<optgroup label="<?php echo $view->escape($translatorHelper->trans($index, array(), $translation_domain)) ?>">
|
||||
<?php echo $formHelper->block($form, 'choice_widget_options', array('choices' => $choice)) ?>
|
||||
</optgroup>
|
||||
<?php else: ?>
|
||||
<option value="<?php echo $view->escape($choice->getValue()) ?>"<?php if ($view['form']->isChoiceSelected($form, $choice)): ?> selected="selected"<?php endif?>><?php echo $view->escape($view['translator']->trans($choice->getLabel(), array(), $translation_domain)) ?></option>
|
||||
<option value="<?php echo $view->escape($choice->value) ?>"<?php if ($is_selected($choice->value, $value)): ?> selected="selected"<?php endif?>><?php echo $view->escape($translatorHelper->trans($choice->label, array(), $translation_domain)) ?></option>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('widget_container_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_container_attributes') ?>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if ($widget == 'single_text'): ?>
|
||||
<?php echo $view['form']->block('form_widget_simple'); ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple'); ?>
|
||||
<?php else: ?>
|
||||
<div <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php echo str_replace(array('{{ year }}', '{{ month }}', '{{ day }}'), array(
|
||||
$view['form']->widget($form['year']),
|
||||
$view['form']->widget($form['month']),
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if ($widget == 'single_text'): ?>
|
||||
<?php echo $view['form']->block('form_widget_simple'); ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple'); ?>
|
||||
<?php else: ?>
|
||||
<div <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php echo $view['form']->widget($form['date']).' '.$view['form']->widget($form['time']) ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : 'email')) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : 'email')) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_enctype') ?>
|
||||
<?php echo $view['form']->block($form, 'form_enctype') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_errors') ?>
|
||||
<?php echo $view['form']->block($form, 'form_errors') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_label') ?>
|
||||
<?php echo $view['form']->block($form, 'form_label') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_rest') ?>
|
||||
<?php echo $view['form']->block($form, 'form_rest') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_row') ?>
|
||||
<?php echo $view['form']->block($form, 'form_row') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_rows') ?>
|
||||
<?php echo $view['form']->block($form, 'form_rows') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple') ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php if ($form->getVar('multipart')): ?>enctype="multipart/form-data"<?php endif ?>
|
||||
<?php if ($form->vars['multipart']): ?>enctype="multipart/form-data"<?php endif ?>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?php if ($compound): ?>
|
||||
<?php echo $view['form']->block('form_widget_compound')?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_compound')?>
|
||||
<?php else: ?>
|
||||
<?php echo $view['form']->block('form_widget_simple')?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple')?>
|
||||
<?php endif ?>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<div <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<?php if (!$form->hasParent() && $errors): ?>
|
||||
<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php if (!$form->parent && $errors): ?>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<?php echo $view['form']->errors($form) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif ?>
|
||||
<?php echo $view['form']->block('form_rows') ?>
|
||||
<?php echo $view['form']->block($form, 'form_rows') ?>
|
||||
<?php echo $view['form']->rest($form) ?>
|
||||
</div>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<input
|
||||
type="<?php echo isset($type) ? $view->escape($type) : 'text' ?>"
|
||||
<?php if (!empty($value)): ?>value="<?php echo $view->escape($value) ?>"<?php endif ?>
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
/>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "hidden")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "hidden")) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "number")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "number")) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo str_replace('{{ widget }}', $view['form']->block('form_widget_simple'), $money_pattern) ?>
|
||||
<?php echo str_replace('{{ widget }}', $view['form']->block($form, 'form_widget_simple'), $money_pattern) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "text")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "text")) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "password")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "password")) ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "text")) ?> %
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "text")) ?> %
|
||||
|
@ -1,5 +1,5 @@
|
||||
<input type="radio"
|
||||
<?php echo $view['form']->block('widget_attributes') ?>
|
||||
<?php echo $view['form']->block($form, 'widget_attributes') ?>
|
||||
value="<?php echo $view->escape($value) ?>"
|
||||
<?php if ($checked): ?> checked="checked"<?php endif ?>
|
||||
/>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_rows') ?>
|
||||
<?php echo $view['form']->block($form, 'form_rows') ?>
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "search")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "search")) ?>
|
||||
|
@ -1 +1 @@
|
||||
<textarea <?php echo $view['form']->block('widget_attributes') ?>><?php echo $view->escape($value) ?></textarea>
|
||||
<textarea <?php echo $view['form']->block($form, 'widget_attributes') ?>><?php echo $view->escape($value) ?></textarea>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if ($widget == 'single_text'): ?>
|
||||
<?php echo $view['form']->block('form_widget_simple'); ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple'); ?>
|
||||
<?php else: ?>
|
||||
<div <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<div <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php
|
||||
// There should be no spaces between the colons and the widgets, that's why
|
||||
// this block is written in a single PHP tag
|
||||
|
@ -1 +1 @@
|
||||
<?php echo $view['form']->block('form_widget_simple', array('type' => isset($type) ? $type : "url")) ?>
|
||||
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : "url")) ?>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<table <?php echo $view['form']->block('widget_container_attributes') ?>>
|
||||
<?php if (!$form->hasParent()): ?>
|
||||
<table <?php echo $view['form']->block($form, 'widget_container_attributes') ?>>
|
||||
<?php if (!$form->parent): ?>
|
||||
<?php echo $view['form']->errors($form) ?>
|
||||
<?php endif ?>
|
||||
<?php echo $view['form']->block('form_rows') ?>
|
||||
<?php echo $view['form']->block($form, 'form_rows') ?>
|
||||
<?php echo $view['form']->rest($form) ?>
|
||||
</table>
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Bundle\FrameworkBundle\Templating\Helper;
|
||||
|
||||
use Symfony\Component\Templating\Helper\Helper;
|
||||
use Symfony\Component\Form\FormRendererInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Templating\EngineInterface;
|
||||
use Symfony\Component\Form\Exception\FormException;
|
||||
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
|
||||
@ -49,25 +49,15 @@ class FormHelper extends Helper
|
||||
return 'form';
|
||||
}
|
||||
|
||||
public function isChoiceGroup($label)
|
||||
{
|
||||
return $this->renderer->isChoiceGroup($label);
|
||||
}
|
||||
|
||||
public function isChoiceSelected(FormViewInterface $view, ChoiceView $choice)
|
||||
{
|
||||
return $this->renderer->isChoiceSelected($view, $choice);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a theme for a given view.
|
||||
*
|
||||
* The theme format is "<Bundle>:<Controller>".
|
||||
*
|
||||
* @param FormViewInterface $view A FormViewInterface instance
|
||||
* @param FormView $view A FormView instance
|
||||
* @param string|array $themes A theme or an array of theme
|
||||
*/
|
||||
public function setTheme(FormViewInterface $view, $themes)
|
||||
public function setTheme(FormView $view, $themes)
|
||||
{
|
||||
$this->renderer->setTheme($view, $themes);
|
||||
}
|
||||
@ -79,13 +69,13 @@ class FormHelper extends Helper
|
||||
*
|
||||
* <form action="..." method="post" <?php echo $view['form']->enctype() ?>>
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the encoding type
|
||||
* @param FormView $view The view for which to render the encoding type
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function enctype(FormViewInterface $view)
|
||||
public function enctype(FormView $view)
|
||||
{
|
||||
return $this->renderer->renderEnctype($view);
|
||||
return $this->renderer->searchAndRenderBlock($view, 'enctype');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,95 +91,84 @@ class FormHelper extends Helper
|
||||
*
|
||||
* <?php echo view['form']->widget(array('separator' => '+++++)) ?>
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the widget
|
||||
* @param array $variables Additional variables passed to the template
|
||||
* @param FormView $view The view for which to render the widget
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function widget(FormViewInterface $view, array $variables = array())
|
||||
public function widget(FormView $view, array $variables = array())
|
||||
{
|
||||
return $this->renderer->renderWidget($view, $variables);
|
||||
return $this->renderer->searchAndRenderBlock($view, 'widget', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the entire form field "row".
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the row
|
||||
* @param array $variables Additional variables passed to the template
|
||||
* @param FormView $view The view for which to render the row
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function row(FormViewInterface $view, array $variables = array())
|
||||
public function row(FormView $view, array $variables = array())
|
||||
{
|
||||
return $this->renderer->renderRow($view, $variables);
|
||||
return $this->renderer->searchAndRenderBlock($view, 'row', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the label of the given view.
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the label
|
||||
* @param string $label The label
|
||||
* @param array $variables Additional variables passed to the template
|
||||
* @param FormView $view The view for which to render the label
|
||||
* @param string $label The label
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function label(FormViewInterface $view, $label = null, array $variables = array())
|
||||
public function label(FormView $view, $label = null, array $variables = array())
|
||||
{
|
||||
return $this->renderer->renderLabel($view, $label, $variables);
|
||||
if ($label !== null) {
|
||||
$variables += array('label' => $label);
|
||||
}
|
||||
|
||||
return $this->renderer->searchAndRenderBlock($view, 'label', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the errors of the given view.
|
||||
*
|
||||
* @param FormViewInterface $view The view to render the errors for
|
||||
* @param FormView $view The view to render the errors for
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function errors(FormViewInterface $view)
|
||||
public function errors(FormView $view)
|
||||
{
|
||||
return $this->renderer->renderErrors($view);
|
||||
return $this->renderer->searchAndRenderBlock($view, 'errors');
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders views which have not already been rendered.
|
||||
*
|
||||
* @param FormViewInterface $view The parent view
|
||||
* @param array $variables An array of variables
|
||||
* @param FormView $view The parent view
|
||||
* @param array $variables An array of variables
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function rest(FormViewInterface $view, array $variables = array())
|
||||
public function rest(FormView $view, array $variables = array())
|
||||
{
|
||||
return $this->renderer->renderRest($view, $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias of {@link block()}
|
||||
*
|
||||
* @param string $block The name of the block to render.
|
||||
* @param array $variables The variable to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Use
|
||||
* {@link block()} instead.
|
||||
*/
|
||||
public function renderBlock($block, array $variables = array())
|
||||
{
|
||||
return $this->block($block, $variables);
|
||||
return $this->renderer->searchAndRenderBlock($view, 'rest', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a block of the template.
|
||||
*
|
||||
* @param string $block The name of the block to render.
|
||||
* @param array $variables The variable to pass to the template.
|
||||
* @param FormView $view The view for determining the used themes.
|
||||
* @param string $blockName The name of the block to render.
|
||||
* @param array $variables The variable to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function block($block, array $variables = array())
|
||||
public function block(FormView $view, $blockName, array $variables = array())
|
||||
{
|
||||
return $this->renderer->renderBlock($block, $variables);
|
||||
return $this->renderer->renderBlock($view, $blockName, $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -28,8 +28,6 @@ class FormHelperDivLayoutTest extends AbstractDivLayoutTest
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
ini_set('xdebug.max_nesting_level', 120);
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$root = realpath(__DIR__.'/../../../Resources/views');
|
||||
|
@ -1,2 +1,2 @@
|
||||
<?php $type = isset($type) ? $type : 'text' ?>
|
||||
<input type="<?php echo $type ?>" <?php $view['form']->renderBlock('widget_attributes') ?> value="<?php echo $value ?>" rel="theme" />
|
||||
<input type="<?php echo $type ?>" <?php $view['form']->block($form, 'widget_attributes') ?> value="<?php echo $value ?>" rel="theme" />
|
||||
|
@ -19,7 +19,7 @@ namespace Symfony\Component\Form;
|
||||
abstract class AbstractRendererEngine implements FormRendererEngineInterface
|
||||
{
|
||||
/**
|
||||
* The variable in {@link FormViewInterface} used as cache key.
|
||||
* The variable in {@link FormView} used as cache key.
|
||||
*/
|
||||
const CACHE_KEY_VAR = 'full_block_name';
|
||||
|
||||
@ -57,9 +57,9 @@ abstract class AbstractRendererEngine implements FormRendererEngineInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setTheme(FormViewInterface $view, $themes)
|
||||
public function setTheme(FormView $view, $themes)
|
||||
{
|
||||
$cacheKey = $view->getVar(self::CACHE_KEY_VAR);
|
||||
$cacheKey = $view->vars[self::CACHE_KEY_VAR];
|
||||
|
||||
// Do not cast, as casting turns objects into arrays of properties
|
||||
$this->themes[$cacheKey] = is_array($themes) ? $themes : array($themes);
|
||||
@ -74,52 +74,52 @@ abstract class AbstractRendererEngine implements FormRendererEngineInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResourceForBlock(FormViewInterface $view, $block)
|
||||
public function getResourceForBlockName(FormView $view, $blockName)
|
||||
{
|
||||
$cacheKey = $view->getVar(self::CACHE_KEY_VAR);
|
||||
$cacheKey = $view->vars[self::CACHE_KEY_VAR];
|
||||
|
||||
if (!isset($this->resources[$cacheKey][$block])) {
|
||||
$this->loadResourceForBlock($cacheKey, $view, $block);
|
||||
if (!isset($this->resources[$cacheKey][$blockName])) {
|
||||
$this->loadResourceForBlockName($cacheKey, $view, $blockName);
|
||||
}
|
||||
|
||||
return $this->resources[$cacheKey][$block];
|
||||
return $this->resources[$cacheKey][$blockName];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResourceForBlockHierarchy(FormViewInterface $view, array $blockHierarchy, $hierarchyLevel)
|
||||
public function getResourceForBlockNameHierarchy(FormView $view, array $blockNameHierarchy, $hierarchyLevel)
|
||||
{
|
||||
$cacheKey = $view->getVar(self::CACHE_KEY_VAR);
|
||||
$block = $blockHierarchy[$hierarchyLevel];
|
||||
$cacheKey = $view->vars[self::CACHE_KEY_VAR];
|
||||
$blockName = $blockNameHierarchy[$hierarchyLevel];
|
||||
|
||||
if (!isset($this->resources[$cacheKey][$block])) {
|
||||
$this->loadResourceForBlockHierarchy($cacheKey, $view, $blockHierarchy, $hierarchyLevel);
|
||||
if (!isset($this->resources[$cacheKey][$blockName])) {
|
||||
$this->loadResourceForBlockNameHierarchy($cacheKey, $view, $blockNameHierarchy, $hierarchyLevel);
|
||||
}
|
||||
|
||||
return $this->resources[$cacheKey][$block];
|
||||
return $this->resources[$cacheKey][$blockName];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResourceHierarchyLevel(FormViewInterface $view, array $blockHierarchy, $hierarchyLevel)
|
||||
public function getResourceHierarchyLevel(FormView $view, array $blockNameHierarchy, $hierarchyLevel)
|
||||
{
|
||||
$cacheKey = $view->getVar(self::CACHE_KEY_VAR);
|
||||
$block = $blockHierarchy[$hierarchyLevel];
|
||||
$cacheKey = $view->vars[self::CACHE_KEY_VAR];
|
||||
$blockName = $blockNameHierarchy[$hierarchyLevel];
|
||||
|
||||
if (!isset($this->resources[$cacheKey][$block])) {
|
||||
$this->loadResourceForBlockHierarchy($cacheKey, $view, $blockHierarchy, $hierarchyLevel);
|
||||
if (!isset($this->resources[$cacheKey][$blockName])) {
|
||||
$this->loadResourceForBlockNameHierarchy($cacheKey, $view, $blockNameHierarchy, $hierarchyLevel);
|
||||
}
|
||||
|
||||
// If $block was previously rendered loaded with loadTemplateForBlock(), the template
|
||||
// is cached but the hierarchy level is not. In this case, we know that the block
|
||||
// exists at this very hierarchy level, so we can just set it.
|
||||
if (!isset($this->resourceHierarchyLevels[$cacheKey][$block])) {
|
||||
$this->resourceHierarchyLevels[$cacheKey][$block] = $hierarchyLevel;
|
||||
if (!isset($this->resourceHierarchyLevels[$cacheKey][$blockName])) {
|
||||
$this->resourceHierarchyLevels[$cacheKey][$blockName] = $hierarchyLevel;
|
||||
}
|
||||
|
||||
return $this->resourceHierarchyLevels[$cacheKey][$block];
|
||||
return $this->resourceHierarchyLevels[$cacheKey][$blockName];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -127,79 +127,79 @@ abstract class AbstractRendererEngine implements FormRendererEngineInterface
|
||||
*
|
||||
* @see getResourceForBlock()
|
||||
*
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormViewInterface $view The form view for finding the applying themes.
|
||||
* @param string $block The name of the block to load.
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormView $view The form view for finding the applying themes.
|
||||
* @param string $blockName The name of the block to load.
|
||||
*
|
||||
* @return Boolean True if the resource could be loaded, false otherwise.
|
||||
*/
|
||||
abstract protected function loadResourceForBlock($cacheKey, FormViewInterface $view, $block);
|
||||
abstract protected function loadResourceForBlockName($cacheKey, FormView $view, $blockName);
|
||||
|
||||
/**
|
||||
* Loads the cache with the resource for a specific level of a block hierarchy.
|
||||
*
|
||||
* @see getResourceForBlockHierarchy()
|
||||
*
|
||||
* @param string $cacheKey The cache key used for storing the
|
||||
* resource.
|
||||
* @param FormViewInterface $view The form view for finding the applying
|
||||
* themes.
|
||||
* @param array $blockHierarchy The block hierarchy, with the most
|
||||
* specific block name at the end.
|
||||
* @param integer $hierarchyLevel The level in the block hierarchy that
|
||||
* should be loaded.
|
||||
* @param string $cacheKey The cache key used for storing the
|
||||
* resource.
|
||||
* @param FormView $view The form view for finding the applying
|
||||
* themes.
|
||||
* @param array $blockNameHierarchy The block hierarchy, with the most
|
||||
* specific block name at the end.
|
||||
* @param integer $hierarchyLevel The level in the block hierarchy that
|
||||
* should be loaded.
|
||||
*
|
||||
* @return Boolean True if the resource could be loaded, false otherwise.
|
||||
*/
|
||||
private function loadResourceForBlockHierarchy($cacheKey, FormViewInterface $view, array $blockHierarchy, $hierarchyLevel)
|
||||
private function loadResourceForBlockNameHierarchy($cacheKey, FormView $view, array $blockNameHierarchy, $hierarchyLevel)
|
||||
{
|
||||
$block = $blockHierarchy[$hierarchyLevel];
|
||||
$blockName = $blockNameHierarchy[$hierarchyLevel];
|
||||
|
||||
// Try to find a template for that block
|
||||
if ($this->loadResourceForBlock($cacheKey, $view, $block)) {
|
||||
if ($this->loadResourceForBlockName($cacheKey, $view, $blockName)) {
|
||||
// If loadTemplateForBlock() returns true, it was able to populate the
|
||||
// cache. The only missing thing is to set the hierarchy level at which
|
||||
// the template was found.
|
||||
$this->resourceHierarchyLevels[$cacheKey][$block] = $hierarchyLevel;
|
||||
$this->resourceHierarchyLevels[$cacheKey][$blockName] = $hierarchyLevel;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($hierarchyLevel > 0) {
|
||||
$parentLevel = $hierarchyLevel - 1;
|
||||
$parentBlock = $blockHierarchy[$parentLevel];
|
||||
$parentBlockName = $blockNameHierarchy[$parentLevel];
|
||||
|
||||
// The next two if statements contain slightly duplicated code. This is by intention
|
||||
// and tries to avoid execution of unnecessary checks in order to increase performance.
|
||||
|
||||
if (isset($this->resources[$cacheKey][$parentBlock])) {
|
||||
if (isset($this->resources[$cacheKey][$parentBlockName])) {
|
||||
// It may happen that the parent block is already loaded, but its level is not.
|
||||
// In this case, the parent block must have been loaded by loadResourceForBlock(),
|
||||
// which does not check the hierarchy of the block. Subsequently the block must have
|
||||
// been found directly on the parent level.
|
||||
if (!isset($this->resourceHierarchyLevels[$cacheKey][$parentBlock])) {
|
||||
$this->resourceHierarchyLevels[$cacheKey][$parentBlock] = $parentLevel;
|
||||
if (!isset($this->resourceHierarchyLevels[$cacheKey][$parentBlockName])) {
|
||||
$this->resourceHierarchyLevels[$cacheKey][$parentBlockName] = $parentLevel;
|
||||
}
|
||||
|
||||
// Cache the shortcuts for further accesses
|
||||
$this->resources[$cacheKey][$block] = $this->resources[$cacheKey][$parentBlock];
|
||||
$this->resourceHierarchyLevels[$cacheKey][$block] = $this->resourceHierarchyLevels[$cacheKey][$parentBlock];
|
||||
$this->resources[$cacheKey][$blockName] = $this->resources[$cacheKey][$parentBlockName];
|
||||
$this->resourceHierarchyLevels[$cacheKey][$blockName] = $this->resourceHierarchyLevels[$cacheKey][$parentBlockName];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($this->loadResourceForBlockHierarchy($cacheKey, $view, $blockHierarchy, $parentLevel)) {
|
||||
if ($this->loadResourceForBlockNameHierarchy($cacheKey, $view, $blockNameHierarchy, $parentLevel)) {
|
||||
// Cache the shortcuts for further accesses
|
||||
$this->resources[$cacheKey][$block] = $this->resources[$cacheKey][$parentBlock];
|
||||
$this->resourceHierarchyLevels[$cacheKey][$block] = $this->resourceHierarchyLevels[$cacheKey][$parentBlock];
|
||||
$this->resources[$cacheKey][$blockName] = $this->resources[$cacheKey][$parentBlockName];
|
||||
$this->resourceHierarchyLevels[$cacheKey][$blockName] = $this->resourceHierarchyLevels[$cacheKey][$parentBlockName];
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Cache the result for further accesses
|
||||
$this->resources[$cacheKey][$block] = false;
|
||||
$this->resourceHierarchyLevels[$cacheKey][$block] = false;
|
||||
$this->resources[$cacheKey][$blockName] = false;
|
||||
$this->resourceHierarchyLevels[$cacheKey][$blockName] = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -36,14 +36,14 @@ abstract class AbstractType implements FormTypeInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
}
|
||||
|
||||
@ -52,19 +52,21 @@ abstract class AbstractType implements FormTypeInterface
|
||||
*/
|
||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
||||
{
|
||||
$resolver->setDefaults($this->getDefaultOptions());
|
||||
$resolver->addAllowedValues($this->getAllowedOptionValues());
|
||||
$resolver->setDefaults($this->getDefaultOptions(array()));
|
||||
$resolver->addAllowedValues($this->getAllowedOptionValues(array()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default options for this type.
|
||||
*
|
||||
* @param array $options Unsupported as of Symfony 2.1.
|
||||
*
|
||||
* @return array The default options
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3.
|
||||
* Use {@link setDefaultOptions()} instead.
|
||||
*/
|
||||
public function getDefaultOptions()
|
||||
public function getDefaultOptions(array $options)
|
||||
{
|
||||
return array();
|
||||
}
|
||||
@ -72,12 +74,14 @@ abstract class AbstractType implements FormTypeInterface
|
||||
/**
|
||||
* Returns the allowed option values for each option (if any).
|
||||
*
|
||||
* @param array $options Unsupported as of Symfony 2.1.
|
||||
*
|
||||
* @return array The allowed option values
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3.
|
||||
* Use {@link setDefaultOptions()} instead.
|
||||
*/
|
||||
public function getAllowedOptionValues()
|
||||
public function getAllowedOptionValues(array $options)
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
@ -28,14 +28,14 @@ abstract class AbstractTypeExtension implements FormTypeExtensionInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -106,17 +106,14 @@ CHANGELOG
|
||||
* removed superfluous methods from DataMapperInterface
|
||||
* `mapFormToData`
|
||||
* `mapDataToForm`
|
||||
* [BC BREAK] FormType::getDefaultOptions() and FormType::getAllowedOptionValues()
|
||||
don't receive an options array anymore.
|
||||
* added `setDefaultOptions` to FormTypeInterface and FormTypeExtensionInterface
|
||||
which accepts an OptionsResolverInterface instance
|
||||
* deprecated the methods `getDefaultOptions` and `getAllowedOptionValues`
|
||||
in FormTypeInterface and FormTypeExtensionInterface
|
||||
* options passed during construction can now be accessed from FormConfigInterface
|
||||
* added FormBuilderInterface, FormViewInterface and FormConfigEditorInterface
|
||||
* [BC BREAK] the methods in FormTypeInterface and FormTypeExtensionInterface now
|
||||
receive FormBuilderInterface and FormViewInterface instead of FormBuilder and
|
||||
FormView
|
||||
* added FormBuilderInterface and FormConfigEditorInterface
|
||||
* [BC BREAK] the method `buildForm` in FormTypeInterface and FormTypeExtensionInterface
|
||||
now receives a FormBuilderInterface instead of a FormBuilder instance
|
||||
* [BC BREAK] the method `buildViewBottomUp` was renamed to `finishView` in
|
||||
FormTypeInterface and FormTypeExtensionInterface
|
||||
* [BC BREAK] the options array is now passed as last argument of the
|
||||
@ -134,8 +131,6 @@ CHANGELOG
|
||||
FormEvents::BIND_NORM_DATA
|
||||
* [BC BREAK] reversed the order of the first two arguments to `createNamed`
|
||||
and `createNamedBuilder` in `FormFactoryInterface`
|
||||
* [BC BREAK] adapted methods of FormView to match the naming used in
|
||||
FormInterface and FormBuilder
|
||||
* deprecated `getChildren` in Form and FormBuilder in favor of `all`
|
||||
* deprecated `hasChildren` in Form and FormBuilder in favor of `count`
|
||||
* FormBuilder now implements \IteratorAggregate
|
||||
@ -178,4 +173,5 @@ CHANGELOG
|
||||
* `toArrayKeys`
|
||||
* `isChoiceGroup`
|
||||
* `isChoiceSelected`
|
||||
* added method `block` to FormHelper and deprecated `renderBlock` instead
|
||||
* [BC BREAK] renamed method `renderBlock` in FormHelper to `block` and changed its signature
|
||||
* made FormView properties public and deprecated their accessor methods
|
||||
|
@ -240,27 +240,19 @@ class ChoiceList implements ChoiceListInterface
|
||||
* view objects.
|
||||
* @param array $bucketForRemaining The bucket where to store the
|
||||
* non-preferred view objects.
|
||||
* @param array $choices The list of choices.
|
||||
* @param array $labels The labels corresponding to the choices.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
* @param array $choices The list of choices.
|
||||
* @param array $labels The labels corresponding to the choices.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
*
|
||||
* @throws UnexpectedTypeException If the structure of the $labels array
|
||||
* does not match the structure of the
|
||||
* $choices array.
|
||||
*/
|
||||
protected function addChoices(&$bucketForPreferred, &$bucketForRemaining, $choices, $labels, array $preferredChoices)
|
||||
protected function addChoices(&$bucketForPreferred, &$bucketForRemaining, array $choices, array $labels, array $preferredChoices)
|
||||
{
|
||||
if (!is_array($choices) && !$choices instanceof \Traversable) {
|
||||
throw new UnexpectedTypeException($choices, 'array or \Traversable');
|
||||
}
|
||||
|
||||
// Add choices to the nested buckets
|
||||
foreach ($choices as $group => $choice) {
|
||||
if (is_array($choice)) {
|
||||
if (!is_array($labels)) {
|
||||
throw new UnexpectedTypeException($labels, 'array');
|
||||
}
|
||||
|
||||
// Don't do the work if the array is empty
|
||||
if (count($choice) > 0) {
|
||||
$this->addChoiceGroup(
|
||||
@ -292,11 +284,11 @@ class ChoiceList implements ChoiceListInterface
|
||||
* view objects.
|
||||
* @param array $bucketForRemaining The bucket where to store the
|
||||
* non-preferred view objects.
|
||||
* @param array $choices The list of choices in the group.
|
||||
* @param array $labels The labels corresponding to the choices in the group.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
* @param array $choices The list of choices in the group.
|
||||
* @param array $labels The labels corresponding to the choices in the group.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
*/
|
||||
protected function addChoiceGroup($group, &$bucketForPreferred, &$bucketForRemaining, $choices, $labels, array $preferredChoices)
|
||||
protected function addChoiceGroup($group, &$bucketForPreferred, &$bucketForRemaining, array $choices, array $labels, array $preferredChoices)
|
||||
{
|
||||
// If this is a choice group, create a new level in the choice
|
||||
// key hierarchy
|
||||
@ -323,13 +315,15 @@ class ChoiceList implements ChoiceListInterface
|
||||
/**
|
||||
* Adds a new choice.
|
||||
*
|
||||
* @param array $bucketForPreferred The bucket where to store the preferred
|
||||
* view objects.
|
||||
* @param array $bucketForRemaining The bucket where to store the
|
||||
* non-preferred view objects.
|
||||
* @param mixed $choice The choice to add.
|
||||
* @param string $label The label for the choice.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
* @param array $bucketForPreferred The bucket where to store the preferred
|
||||
* view objects.
|
||||
* @param array $bucketForRemaining The bucket where to store the
|
||||
* non-preferred view objects.
|
||||
* @param mixed $choice The choice to add.
|
||||
* @param string $label The label for the choice.
|
||||
* @param array $preferredChoices The preferred choices.
|
||||
*
|
||||
* @throws InvalidConfigurationException If no valid value or index could be created.
|
||||
*/
|
||||
protected function addChoice(&$bucketForPreferred, &$bucketForRemaining, $choice, $label, array $preferredChoices)
|
||||
{
|
||||
@ -366,8 +360,10 @@ class ChoiceList implements ChoiceListInterface
|
||||
*
|
||||
* @param mixed $choice The choice to test.
|
||||
* @param array $preferredChoices An array of preferred choices.
|
||||
*
|
||||
* @return Boolean Whether the choice is preferred.
|
||||
*/
|
||||
protected function isPreferred($choice, $preferredChoices)
|
||||
protected function isPreferred($choice, array $preferredChoices)
|
||||
{
|
||||
return false !== array_search($choice, $preferredChoices, true);
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ class SimpleChoiceList extends ChoiceList
|
||||
*
|
||||
* @see parent::addChoices
|
||||
*/
|
||||
protected function addChoices(&$bucketForPreferred, &$bucketForRemaining, $choices, $labels, array $preferredChoices)
|
||||
protected function addChoices(&$bucketForPreferred, &$bucketForRemaining, array $choices, array $labels, array $preferredChoices)
|
||||
{
|
||||
// Add choices to the nested buckets
|
||||
foreach ($choices as $choice => $label) {
|
||||
@ -126,8 +126,10 @@ class SimpleChoiceList extends ChoiceList
|
||||
*
|
||||
* @param mixed $choice The choice to test.
|
||||
* @param array $preferredChoices An array of preferred choices.
|
||||
*
|
||||
* @return Boolean Whether the choice is preferred.
|
||||
*/
|
||||
protected function isPreferred($choice, $preferredChoices)
|
||||
protected function isPreferred($choice, array $preferredChoices)
|
||||
{
|
||||
// Optimize performance over the default implementation
|
||||
return isset($preferredChoices[$choice]);
|
||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\BooleanToStringTransformer;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
class CheckboxType extends AbstractType
|
||||
@ -33,9 +33,9 @@ class CheckboxType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'value' => $options['value'],
|
||||
'checked' => null !== $form->getViewData(),
|
||||
));
|
||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\Exception\FormException;
|
||||
use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList;
|
||||
use Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList;
|
||||
@ -79,9 +79,9 @@ class ChoiceType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'multiple' => $options['multiple'],
|
||||
'expanded' => $options['expanded'],
|
||||
'preferred_choices' => $options['choice_list']->getPreferredViews(),
|
||||
@ -90,28 +90,42 @@ class ChoiceType extends AbstractType
|
||||
'empty_value' => null,
|
||||
));
|
||||
|
||||
// The decision, whether a choice is selected, is potentially done
|
||||
// thousand of times during the rendering of a template. Provide a
|
||||
// closure here that is optimized for the value of the form, to
|
||||
// avoid making the type check inside the closure.
|
||||
if ($options['multiple']) {
|
||||
$view->vars['is_selected'] = function ($choice, array $values) {
|
||||
return false !== array_search($choice, $values, true);
|
||||
};
|
||||
} else {
|
||||
$view->vars['is_selected'] = function ($choice, $value) {
|
||||
return $choice === $value;
|
||||
};
|
||||
}
|
||||
|
||||
// Check if the choices already contain the empty value
|
||||
// Only add the empty value option if this is not the case
|
||||
if (0 === count($options['choice_list']->getIndicesForValues(array('')))) {
|
||||
$view->setVar('empty_value', $options['empty_value']);
|
||||
$view->vars['empty_value'] = $options['empty_value'];
|
||||
}
|
||||
|
||||
if ($options['multiple'] && !$options['expanded']) {
|
||||
// Add "[]" to the name in case a select tag with multiple options is
|
||||
// displayed. Otherwise only one of the selected options is sent in the
|
||||
// POST request.
|
||||
$view->setVar('full_name', $view->getVar('full_name').'[]');
|
||||
$view->vars['full_name'] = $view->vars['full_name'].'[]';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if ($options['expanded']) {
|
||||
// Radio buttons should have the same name as the parent
|
||||
$childName = $view->getVar('full_name');
|
||||
$childName = $view->vars['full_name'];
|
||||
|
||||
// Checkboxes should append "[]" to allow multiple selection
|
||||
if ($options['multiple']) {
|
||||
@ -119,7 +133,7 @@ class ChoiceType extends AbstractType
|
||||
}
|
||||
|
||||
foreach ($view as $childView) {
|
||||
$childView->setVar('full_name', $childName);
|
||||
$childView->vars['full_name'] = $childName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,8 +240,8 @@ class ChoiceType extends AbstractType
|
||||
$this->addSubForms($builder, $choiceView, $options);
|
||||
} else {
|
||||
$choiceOpts = array(
|
||||
'value' => $choiceView->getValue(),
|
||||
'label' => $choiceView->getLabel(),
|
||||
'value' => $choiceView->value,
|
||||
'label' => $choiceView->label,
|
||||
'translation_domain' => $options['translation_domain'],
|
||||
);
|
||||
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener;
|
||||
use Symfony\Component\OptionsResolver\Options;
|
||||
@ -47,25 +47,25 @@ class CollectionType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'allow_add' => $options['allow_add'],
|
||||
'allow_delete' => $options['allow_delete'],
|
||||
));
|
||||
|
||||
if ($form->getConfig()->hasAttribute('prototype')) {
|
||||
$view->setVar('prototype', $form->getConfig()->getAttribute('prototype')->createView($view));
|
||||
$view->vars['prototype'] = $form->getConfig()->getAttribute('prototype')->createView($view);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if ($form->getConfig()->hasAttribute('prototype') && $view->getVar('prototype')->getVar('multipart')) {
|
||||
$view->setVar('multipart', true);
|
||||
if ($form->getConfig()->hasAttribute('prototype') && $view->vars['prototype']->vars['multipart']) {
|
||||
$view->vars['multipart'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\ReversedTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DataTransformerChain;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
|
||||
@ -174,15 +174,15 @@ class DateTimeType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->setVar('widget', $options['widget']);
|
||||
$view->vars['widget'] = $options['widget'];
|
||||
|
||||
// Change the input to a HTML5 date input if
|
||||
// * the widget is set to "single_text"
|
||||
// * the format matches the one expected by HTML5
|
||||
if ('single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
|
||||
$view->setVar('type', 'datetime');
|
||||
$view->vars['type'] = 'datetime';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\Exception\CreationException;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
|
||||
@ -124,15 +124,15 @@ class DateType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->setVar('widget', $options['widget']);
|
||||
$view->vars['widget'] = $options['widget'];
|
||||
|
||||
// Change the input to a HTML5 date input if
|
||||
// * the widget is set to "single_text"
|
||||
// * the format matches the one expected by HTML5
|
||||
if ('single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
|
||||
$view->setVar('type', 'date');
|
||||
$view->vars['type'] = 'date';
|
||||
}
|
||||
|
||||
if ($form->getConfig()->hasAttribute('formatter')) {
|
||||
@ -147,7 +147,7 @@ class DateType extends AbstractType
|
||||
$pattern = '{{ year }}-{{ month }}-{{ day }}';
|
||||
}
|
||||
|
||||
$view->setVar('date_pattern', $pattern);
|
||||
$view->vars['date_pattern'] = $pattern;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
class FileType extends AbstractType
|
||||
@ -21,9 +21,9 @@ class FileType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'type' => 'file',
|
||||
'value' => '',
|
||||
));
|
||||
@ -32,10 +32,10 @@ class FileType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view
|
||||
->setVar('multipart', true)
|
||||
->vars['multipart'] = true
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ use Symfony\Component\Form\FormBuilder;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormFactoryInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\Extension\Core\EventListener\BindRequestListener;
|
||||
use Symfony\Component\Form\Extension\Core\EventListener\TrimListener;
|
||||
use Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper;
|
||||
@ -56,24 +56,22 @@ class FormType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$name = $form->getName();
|
||||
$blockName = $options['block_name'] ?: $form->getName();
|
||||
$readOnly = $options['read_only'];
|
||||
$translationDomain = $options['translation_domain'];
|
||||
|
||||
if ($view->hasParent()) {
|
||||
if ($view->parent) {
|
||||
if ('' === $name) {
|
||||
throw new FormException('Form node with empty name can be used only as root form node.');
|
||||
}
|
||||
|
||||
$parentView = $view->getParent();
|
||||
|
||||
if ('' !== ($parentFullName = $parentView->getVar('full_name'))) {
|
||||
$id = sprintf('%s_%s', $parentView->getVar('id'), $name);
|
||||
if ('' !== ($parentFullName = $view->parent->vars['full_name'])) {
|
||||
$id = sprintf('%s_%s', $view->parent->vars['id'], $name);
|
||||
$fullName = sprintf('%s[%s]', $parentFullName, $name);
|
||||
$fullBlockName = sprintf('%s_%s', $parentView->getVar('full_block_name'), $blockName);
|
||||
$fullBlockName = sprintf('%s_%s', $view->parent->vars['full_block_name'], $blockName);
|
||||
} else {
|
||||
$id = $name;
|
||||
$fullName = $name;
|
||||
@ -82,11 +80,11 @@ class FormType extends AbstractType
|
||||
|
||||
// Complex fields are read-only if they themselves or their parents are.
|
||||
if (!$readOnly) {
|
||||
$readOnly = $parentView->getVar('read_only');
|
||||
$readOnly = $view->parent->vars['read_only'];
|
||||
}
|
||||
|
||||
if (!$translationDomain) {
|
||||
$translationDomain = $parentView->getVar('translation_domain');
|
||||
$translationDomain = $view->parent->vars['translation_domain'];
|
||||
}
|
||||
} else {
|
||||
$id = $name;
|
||||
@ -108,7 +106,7 @@ class FormType extends AbstractType
|
||||
$translationDomain = 'messages';
|
||||
}
|
||||
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'form' => $view,
|
||||
'id' => $id,
|
||||
'name' => $name,
|
||||
@ -136,18 +134,18 @@ class FormType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$multipart = false;
|
||||
|
||||
foreach ($view as $child) {
|
||||
if ($child->getVar('multipart')) {
|
||||
foreach ($view->children as $child) {
|
||||
if ($child->vars['multipart']) {
|
||||
$multipart = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$view->setVar('multipart', $multipart);
|
||||
$view->vars['multipart'] = $multipart;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
class MoneyType extends AbstractType
|
||||
@ -40,9 +40,9 @@ class MoneyType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->setVar('money_pattern', self::getPattern($options['currency']));
|
||||
$view->vars['money_pattern'] = self::getPattern($options['currency']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
class PasswordType extends AbstractType
|
||||
@ -21,10 +21,10 @@ class PasswordType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if ($options['always_empty'] || !$form->isBound()) {
|
||||
$view->setVar('value', '');
|
||||
$view->vars['value'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
|
||||
class TextareaType extends AbstractType
|
||||
@ -20,9 +20,9 @@ class TextareaType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->setVar('pattern', null);
|
||||
$view->vars['pattern'] = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@ use Symfony\Component\Form\ReversedTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\Options;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
@ -109,15 +109,15 @@ class TimeType extends AbstractType
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
$view->addVars(array(
|
||||
$view->vars = array_replace($view->vars, array(
|
||||
'widget' => $options['widget'],
|
||||
'with_seconds' => $options['with_seconds'],
|
||||
));
|
||||
|
||||
if ('single_text' === $options['widget']) {
|
||||
$view->setVar('type', 'time');
|
||||
$view->vars['type'] = 'time';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,14 +23,14 @@ class ChoiceView
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $value;
|
||||
public $value;
|
||||
|
||||
/**
|
||||
* The label displayed to humans.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $label;
|
||||
public $label;
|
||||
|
||||
/**
|
||||
* Creates a new ChoiceView.
|
||||
@ -45,22 +45,18 @@ class ChoiceView
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the choice value.
|
||||
* Returns whether this choice is selected for the given value.
|
||||
*
|
||||
* @return string The view representation of the choice.
|
||||
* @param string|array $value The selected choice value.
|
||||
*
|
||||
* @return Boolean Whether the choice is selected.
|
||||
*/
|
||||
public function getValue()
|
||||
public function isSelected($value)
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
return false !== array_search($this->value, $value, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the choice label.
|
||||
*
|
||||
* @return string The label displayed to humans.
|
||||
*/
|
||||
public function getLabel()
|
||||
{
|
||||
return $this->label;
|
||||
return $this->value === $value;
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractTypeExtension;
|
||||
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
|
||||
use Symfony\Component\Form\Extension\Csrf\EventListener\CsrfValidationListener;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
@ -59,9 +59,9 @@ class FormTypeCsrfExtension extends AbstractTypeExtension
|
||||
* @param FormView $view The form view
|
||||
* @param FormInterface $form The form
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if ($options['csrf_protection'] && !$view->hasParent() && $options['compound']) {
|
||||
if ($options['csrf_protection'] && !$view->parent && $options['compound']) {
|
||||
$factory = $form->getConfig()->getAttribute('csrf_factory');
|
||||
$data = $options['csrf_provider']->generateCsrfToken($options['intention']);
|
||||
|
||||
@ -69,7 +69,7 @@ class FormTypeCsrfExtension extends AbstractTypeExtension
|
||||
'mapped' => false,
|
||||
));
|
||||
|
||||
$view->add($csrfForm->createView($view));
|
||||
$view->children[$options['csrf_field_name']] = $csrfForm->createView($view);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace Symfony\Component\Form\Extension\Templating;
|
||||
|
||||
use Symfony\Component\Form\AbstractRendererEngine;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Templating\EngineInterface;
|
||||
|
||||
/**
|
||||
@ -35,7 +35,7 @@ class TemplatingRendererEngine extends AbstractRendererEngine
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderBlock(FormViewInterface $view, $resource, $block, array $variables = array())
|
||||
public function renderBlock(FormView $view, $resource, $blockName, array $variables = array())
|
||||
{
|
||||
return trim($this->engine->render($resource, $variables));
|
||||
}
|
||||
@ -48,13 +48,13 @@ class TemplatingRendererEngine extends AbstractRendererEngine
|
||||
*
|
||||
* @see getResourceForBlock()
|
||||
*
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormViewInterface $view The form view for finding the applying themes.
|
||||
* @param string $block The name of the block to load.
|
||||
* @param string $cacheKey The cache key of the form view.
|
||||
* @param FormView $view The form view for finding the applying themes.
|
||||
* @param string $blockName The name of the block to load.
|
||||
*
|
||||
* @return Boolean True if the resource could be loaded, false otherwise.
|
||||
*/
|
||||
protected function loadResourceForBlock($cacheKey, FormViewInterface $view, $block)
|
||||
protected function loadResourceForBlockName($cacheKey, FormView $view, $blockName)
|
||||
{
|
||||
// Recursively try to find the block in the themes assigned to $view,
|
||||
// then of its parent form, then of the parent form of the parent and so on.
|
||||
@ -64,16 +64,16 @@ class TemplatingRendererEngine extends AbstractRendererEngine
|
||||
// Check each theme whether it contains the searched block
|
||||
if (isset($this->themes[$cacheKey])) {
|
||||
for ($i = count($this->themes[$cacheKey]) - 1; $i >= 0; --$i) {
|
||||
if ($this->loadResourceFromTheme($cacheKey, $block, $this->themes[$cacheKey][$i])) {
|
||||
if ($this->loadResourceFromTheme($cacheKey, $blockName, $this->themes[$cacheKey][$i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check the default themes once we reach the root form without success
|
||||
if (!$view->hasParent()) {
|
||||
if (!$view->parent) {
|
||||
for ($i = count($this->defaultThemes) - 1; $i >= 0; --$i) {
|
||||
if ($this->loadResourceFromTheme($cacheKey, $block, $this->defaultThemes[$i])) {
|
||||
if ($this->loadResourceFromTheme($cacheKey, $blockName, $this->defaultThemes[$i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -81,24 +81,24 @@ class TemplatingRendererEngine extends AbstractRendererEngine
|
||||
|
||||
// If we did not find anything in the themes of the current view, proceed
|
||||
// with the themes of the parent view
|
||||
if ($view->hasParent()) {
|
||||
$parentCacheKey = $view->getParent()->getVar(self::CACHE_KEY_VAR);
|
||||
if ($view->parent) {
|
||||
$parentCacheKey = $view->parent->vars[self::CACHE_KEY_VAR];
|
||||
|
||||
if (!isset($this->resources[$parentCacheKey][$block])) {
|
||||
$this->loadResourceForBlock($parentCacheKey, $view->getParent(), $block);
|
||||
if (!isset($this->resources[$parentCacheKey][$blockName])) {
|
||||
$this->loadResourceForBlockName($parentCacheKey, $view->parent, $blockName);
|
||||
}
|
||||
|
||||
// If a template exists in the parent themes, cache that template
|
||||
// for the current theme as well to speed up further accesses
|
||||
if ($this->resources[$parentCacheKey][$block]) {
|
||||
$this->resources[$cacheKey][$block] = $this->resources[$parentCacheKey][$block];
|
||||
if ($this->resources[$parentCacheKey][$blockName]) {
|
||||
$this->resources[$cacheKey][$blockName] = $this->resources[$parentCacheKey][$blockName];
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Cache that we didn't find anything to speed up further accesses
|
||||
$this->resources[$cacheKey][$block] = false;
|
||||
$this->resources[$cacheKey][$blockName] = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -106,16 +106,16 @@ class TemplatingRendererEngine extends AbstractRendererEngine
|
||||
/**
|
||||
* Tries to load the resource for a block from a theme.
|
||||
*
|
||||
* @param string $cacheKey The cache key for storing the resource.
|
||||
* @param string $block The name of the block to load a resource for.
|
||||
* @param mixed $theme The theme to load the block from.
|
||||
* @param string $cacheKey The cache key for storing the resource.
|
||||
* @param string $blockName The name of the block to load a resource for.
|
||||
* @param mixed $theme The theme to load the block from.
|
||||
*
|
||||
* @return Boolean True if the resource could be loaded, false otherwise.
|
||||
*/
|
||||
protected function loadResourceFromTheme($cacheKey, $block, $theme)
|
||||
protected function loadResourceFromTheme($cacheKey, $blockName, $theme)
|
||||
{
|
||||
if ($this->engine->exists($templateName = $theme . ':' . $block . '.html.php')) {
|
||||
$this->resources[$cacheKey][$block] = $templateName;
|
||||
if ($this->engine->exists($templateName = $theme . ':' . $blockName . '.html.php')) {
|
||||
$this->resources[$cacheKey][$blockName] = $templateName;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1015,7 +1015,7 @@ class Form implements \IteratorAggregate, FormInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function createView(FormViewInterface $parent = null)
|
||||
public function createView(FormView $parent = null)
|
||||
{
|
||||
if (null === $parent && $this->parent) {
|
||||
$parent = $this->parent->createView();
|
||||
|
@ -238,9 +238,9 @@ interface FormInterface extends \ArrayAccess, \Traversable, \Countable
|
||||
/**
|
||||
* Creates a view.
|
||||
*
|
||||
* @param FormViewInterface $parent The parent view
|
||||
* @param FormView $parent The parent view
|
||||
*
|
||||
* @return FormViewInterface The view
|
||||
* @return FormView The view
|
||||
*/
|
||||
public function createView(FormViewInterface $parent = null);
|
||||
public function createView(FormView $parent = null);
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class FormRenderer implements FormRendererInterface
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $blockHierarchyMap = array();
|
||||
private $blockNameHierarchyMap = array();
|
||||
|
||||
/**
|
||||
* @var array
|
||||
@ -50,7 +50,7 @@ class FormRenderer implements FormRendererInterface
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $stack = array();
|
||||
private $variableStack = array();
|
||||
|
||||
public function __construct(FormRendererEngineInterface $engine, CsrfProviderInterface $csrfProvider = null)
|
||||
{
|
||||
@ -69,63 +69,11 @@ class FormRenderer implements FormRendererInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setTheme(FormViewInterface $view, $themes)
|
||||
public function setTheme(FormView $view, $themes)
|
||||
{
|
||||
$this->engine->setTheme($view, $themes);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderEnctype(FormViewInterface $view)
|
||||
{
|
||||
return $this->renderSection($view, 'enctype');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderRow(FormViewInterface $view, array $variables = array())
|
||||
{
|
||||
return $this->renderSection($view, 'row', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderRest(FormViewInterface $view, array $variables = array())
|
||||
{
|
||||
return $this->renderSection($view, 'rest', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderWidget(FormViewInterface $view, array $variables = array())
|
||||
{
|
||||
return $this->renderSection($view, 'widget', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderErrors(FormViewInterface $view)
|
||||
{
|
||||
return $this->renderSection($view, 'errors');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderLabel(FormViewInterface $view, $label = null, array $variables = array())
|
||||
{
|
||||
if ($label !== null) {
|
||||
$variables += array('label' => $label);
|
||||
}
|
||||
|
||||
return $this->renderSection($view, 'label', $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
@ -141,18 +89,18 @@ class FormRenderer implements FormRendererInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function renderBlock($block, array $variables = array())
|
||||
public function renderBlock(FormView $view, $blockName, array $variables = array())
|
||||
{
|
||||
if (0 == count($this->stack)) {
|
||||
if (0 == count($this->variableStack)) {
|
||||
throw new FormException('This method should only be called while rendering a form element.');
|
||||
}
|
||||
|
||||
list($view, $scopeVariables) = end($this->stack);
|
||||
$scopeVariables = end($this->variableStack);
|
||||
|
||||
$resource = $this->engine->getResourceForBlock($view, $block);
|
||||
$resource = $this->engine->getResourceForBlockName($view, $blockName);
|
||||
|
||||
if (!$resource) {
|
||||
throw new FormException(sprintf('No block "%s" found while rendering the form.', $block));
|
||||
throw new FormException(sprintf('No block "%s" found while rendering the form.', $blockName));
|
||||
}
|
||||
|
||||
// Merge the passed with the existing attributes
|
||||
@ -169,61 +117,30 @@ class FormRenderer implements FormRendererInterface
|
||||
// cannot be overwritten
|
||||
$variables = array_replace($scopeVariables, $variables);
|
||||
|
||||
return $this->engine->renderBlock($view, $resource, $block, $variables);
|
||||
$this->variableStack[] = $variables;
|
||||
|
||||
// Do the rendering
|
||||
$html = $this->engine->renderBlock($view, $resource, $blockName, $variables);
|
||||
|
||||
// Clear the stack
|
||||
array_pop($this->variableStack);
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isChoiceGroup($choice)
|
||||
public function searchAndRenderBlock(FormView $view, $blockNameSuffix, array $variables = array())
|
||||
{
|
||||
return is_array($choice) || $choice instanceof \Traversable;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isChoiceSelected(FormViewInterface $view, ChoiceView $choice)
|
||||
{
|
||||
$value = $view->getVar('value');
|
||||
$choiceValue = $choice->getValue();
|
||||
|
||||
if (is_array($value)) {
|
||||
return false !== array_search($choiceValue, $value, true);
|
||||
}
|
||||
|
||||
return $choiceValue === $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function humanize($text)
|
||||
{
|
||||
return ucfirst(trim(strtolower(preg_replace('/[_\s]+/', ' ', $text))));
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the given section of a form view.
|
||||
*
|
||||
* @param FormViewInterface $view The form view.
|
||||
* @param string $section The name of the section to render.
|
||||
* @param array $variables The variables to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup.
|
||||
*
|
||||
* @throws Exception\FormException If no fitting template was found.
|
||||
*/
|
||||
protected function renderSection(FormViewInterface $view, $section, array $variables = array())
|
||||
{
|
||||
$renderOnlyOnce = in_array($section, array('row', 'widget'));
|
||||
$renderOnlyOnce = in_array($blockNameSuffix, array('row', 'widget'));
|
||||
|
||||
if ($renderOnlyOnce && $view->isRendered()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// The cache key for storing the variables and types
|
||||
$mapKey = $uniqueBlockName = $view->getVar('full_block_name') . '_' . $section;
|
||||
$mapKey = $uniqueBlockName = $view->vars['full_block_name'] . '_' . $blockNameSuffix;
|
||||
|
||||
// In templates, we have to deal with two kinds of block hierarchies:
|
||||
//
|
||||
@ -252,25 +169,25 @@ class FormRenderer implements FormRendererInterface
|
||||
// widget() function again to render the block for the parent type.
|
||||
//
|
||||
// The second kind is implemented in the following blocks.
|
||||
if (!isset($this->blockHierarchyMap[$mapKey])) {
|
||||
if (!isset($this->blockNameHierarchyMap[$mapKey])) {
|
||||
// INITIAL CALL
|
||||
// Calculate the hierarchy of template blocks and start on
|
||||
// the bottom level of the hierarchy (= "_<id>_<section>" block)
|
||||
$blockHierarchy = array();
|
||||
foreach ($view->getVar('types') as $type) {
|
||||
$blockHierarchy[] = $type . '_' . $section;
|
||||
$blockNameHierarchy = array();
|
||||
foreach ($view->vars['types'] as $type) {
|
||||
$blockNameHierarchy[] = $type . '_' . $blockNameSuffix;
|
||||
}
|
||||
$blockHierarchy[] = $uniqueBlockName;
|
||||
$hierarchyLevel = count($blockHierarchy) - 1;
|
||||
$blockNameHierarchy[] = $uniqueBlockName;
|
||||
$hierarchyLevel = count($blockNameHierarchy) - 1;
|
||||
|
||||
// The default variable scope contains all view variables, merged with
|
||||
// the variables passed explicitly to the helper
|
||||
$scopeVariables = $view->getVars();
|
||||
$scopeVariables = $view->vars;
|
||||
} else {
|
||||
// RECURSIVE CALL
|
||||
// If a block recursively calls renderSection() again, resume rendering
|
||||
// using the parent type in the hierarchy.
|
||||
$blockHierarchy = $this->blockHierarchyMap[$mapKey];
|
||||
$blockNameHierarchy = $this->blockNameHierarchyMap[$mapKey];
|
||||
$hierarchyLevel = $this->hierarchyLevelMap[$mapKey] - 1;
|
||||
|
||||
// Reuse the current scope and merge it with the explicitly passed variables
|
||||
@ -278,22 +195,22 @@ class FormRenderer implements FormRendererInterface
|
||||
}
|
||||
|
||||
// Load the resource where this block can be found
|
||||
$resource = $this->engine->getResourceForBlockHierarchy($view, $blockHierarchy, $hierarchyLevel);
|
||||
$resource = $this->engine->getResourceForBlockNameHierarchy($view, $blockNameHierarchy, $hierarchyLevel);
|
||||
|
||||
// Update the current hierarchy level to the one at which the resource was
|
||||
// found. For example, if looking for "choice_widget", but only a resource
|
||||
// is found for its parent "form_widget", then the level is updated here
|
||||
// to the parent level.
|
||||
$hierarchyLevel = $this->engine->getResourceHierarchyLevel($view, $blockHierarchy, $hierarchyLevel);
|
||||
$hierarchyLevel = $this->engine->getResourceHierarchyLevel($view, $blockNameHierarchy, $hierarchyLevel);
|
||||
|
||||
// The actually existing block name in $resource
|
||||
$block = $blockHierarchy[$hierarchyLevel];
|
||||
$blockName = $blockNameHierarchy[$hierarchyLevel];
|
||||
|
||||
// Escape if no resource exists for this block
|
||||
if (!$resource) {
|
||||
throw new FormException(sprintf(
|
||||
'Unable to render the form as none of the following blocks exist: "%s".',
|
||||
implode('", "', array_reverse($blockHierarchy))
|
||||
implode('", "', array_reverse($blockNameHierarchy))
|
||||
));
|
||||
}
|
||||
|
||||
@ -318,7 +235,7 @@ class FormRenderer implements FormRendererInterface
|
||||
// We need to store these values in maps (associative arrays) because within a
|
||||
// call to widget() another call to widget() can be made, but for a different view
|
||||
// object. These nested calls should not override each other.
|
||||
$this->blockHierarchyMap[$mapKey] = $blockHierarchy;
|
||||
$this->blockNameHierarchyMap[$mapKey] = $blockNameHierarchy;
|
||||
$this->hierarchyLevelMap[$mapKey] = $hierarchyLevel;
|
||||
$this->variableMap[$mapKey] = $variables;
|
||||
|
||||
@ -328,16 +245,16 @@ class FormRenderer implements FormRendererInterface
|
||||
//
|
||||
// A stack is sufficient for this purpose, because renderBlock() always accesses
|
||||
// the immediate next outer scope, which is always stored at the end of the stack.
|
||||
$this->stack[] = array($view, $variables);
|
||||
$this->variableStack[] = $variables;
|
||||
|
||||
// Do the rendering
|
||||
$html = $this->engine->renderBlock($view, $resource, $block, $variables);
|
||||
$html = $this->engine->renderBlock($view, $resource, $blockName, $variables);
|
||||
|
||||
// Clear the stack
|
||||
array_pop($this->stack);
|
||||
array_pop($this->variableStack);
|
||||
|
||||
// Clear the maps
|
||||
unset($this->blockHierarchyMap[$mapKey]);
|
||||
unset($this->blockNameHierarchyMap[$mapKey]);
|
||||
unset($this->hierarchyLevelMap[$mapKey]);
|
||||
unset($this->variableMap[$mapKey]);
|
||||
|
||||
@ -347,4 +264,12 @@ class FormRenderer implements FormRendererInterface
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function humanize($text)
|
||||
{
|
||||
return ucfirst(trim(strtolower(preg_replace('/[_\s]+/', ' ', $text))));
|
||||
}
|
||||
}
|
||||
|
@ -21,11 +21,11 @@ interface FormRendererEngineInterface
|
||||
/**
|
||||
* Sets the theme(s) to be used for rendering a view and its children.
|
||||
*
|
||||
* @param FormViewInterface $view The view to assign the theme(s) to.
|
||||
* @param mixed $themes The theme(s). The type of these themes
|
||||
* is open to the implementation.
|
||||
* @param FormView $view The view to assign the theme(s) to.
|
||||
* @param mixed $themes The theme(s). The type of these themes
|
||||
* is open to the implementation.
|
||||
*/
|
||||
public function setTheme(FormViewInterface $view, $themes);
|
||||
public function setTheme(FormView $view, $themes);
|
||||
|
||||
/**
|
||||
* Returns the resource for a block name.
|
||||
@ -36,15 +36,15 @@ interface FormRendererEngineInterface
|
||||
* The type of the resource is decided by the implementation. The resource
|
||||
* is later passed to {@link renderBlock()} by the rendering algorithm.
|
||||
*
|
||||
* @param FormViewInterface $view The view for determining the used themes.
|
||||
* First the themes attached directly to the
|
||||
* view with {@link setTheme()} are considered,
|
||||
* then the ones of its parent etc.
|
||||
* @param string $block The name of the block to render.
|
||||
* @param FormView $view The view for determining the used themes.
|
||||
* First the themes attached directly to the
|
||||
* view with {@link setTheme()} are considered,
|
||||
* then the ones of its parent etc.
|
||||
* @param string $blockName The name of the block to render.
|
||||
*
|
||||
* @return mixed The renderer resource or false, if none was found.
|
||||
*/
|
||||
public function getResourceForBlock(FormViewInterface $view, $block);
|
||||
public function getResourceForBlockName(FormView $view, $blockName);
|
||||
|
||||
/**
|
||||
* Returns the resource for a block hierarchy.
|
||||
@ -70,21 +70,23 @@ interface FormRendererEngineInterface
|
||||
* The type of the resource is decided by the implementation. The resource
|
||||
* is later passed to {@link renderBlock()} by the rendering algorithm.
|
||||
*
|
||||
* @param FormViewInterface $view The view for determining the used
|
||||
* themes. First the themes attached
|
||||
* directly to the view with
|
||||
* {@link setTheme()} are considered,
|
||||
* then the ones of its parent etc.
|
||||
* @param array $blockHierarchy The block name hierarchy, with
|
||||
* the root block at the beginning.
|
||||
* @param integer $hierarchyLevel The level in the hierarchy at
|
||||
* which to start looking. Level 0
|
||||
* indicates the root block, i.e.
|
||||
* the first element of $blockHierarchy.
|
||||
* @param FormView $view The view for determining the
|
||||
* used themes. First the themes
|
||||
* attached directly to the view
|
||||
* with {@link setTheme()} are
|
||||
* considered, then the ones of
|
||||
* its parent etc.
|
||||
* @param array $blockNameHierarchy The block name hierarchy, with
|
||||
* the root block at the beginning.
|
||||
* @param integer $hierarchyLevel The level in the hierarchy at
|
||||
* which to start looking. Level 0
|
||||
* indicates the root block, i.e.
|
||||
* the first element of
|
||||
* $blockNameHierarchy.
|
||||
*
|
||||
* @return mixed The renderer resource or false, if none was found.
|
||||
*/
|
||||
public function getResourceForBlockHierarchy(FormViewInterface $view, array $blockHierarchy, $hierarchyLevel);
|
||||
public function getResourceForBlockNameHierarchy(FormView $view, array $blockNameHierarchy, $hierarchyLevel);
|
||||
|
||||
/**
|
||||
* Returns the hierarchy level at which a resource can be found.
|
||||
@ -112,21 +114,23 @@ interface FormRendererEngineInterface
|
||||
* The type of the resource is decided by the implementation. The resource
|
||||
* is later passed to {@link renderBlock()} by the rendering algorithm.
|
||||
*
|
||||
* @param FormViewInterface $view The view for determining the used
|
||||
* themes. First the themes attached
|
||||
* directly to the view with
|
||||
* {@link setTheme()} are considered,
|
||||
* then the ones of its parent etc.
|
||||
* @param array $blockHierarchy The block name hierarchy, with
|
||||
* the root block at the beginning.
|
||||
* @param integer $hierarchyLevel The level in the hierarchy at
|
||||
* which to start looking. Level 0
|
||||
* indicates the root block, i.e.
|
||||
* the first element of $blockHierarchy.
|
||||
* @param FormView $view The view for determining the
|
||||
* used themes. First the themes
|
||||
* attached directly to the view
|
||||
* with {@link setTheme()} are
|
||||
* considered, then the ones of
|
||||
* its parent etc.
|
||||
* @param array $blockNameHierarchy The block name hierarchy, with
|
||||
* the root block at the beginning.
|
||||
* @param integer $hierarchyLevel The level in the hierarchy at
|
||||
* which to start looking. Level 0
|
||||
* indicates the root block, i.e.
|
||||
* the first element of
|
||||
* $blockNameHierarchy.
|
||||
*
|
||||
* @return integer|Boolean The hierarchy level or false, if no resource was found.
|
||||
*/
|
||||
public function getResourceHierarchyLevel(FormViewInterface $view, array $blockHierarchy, $hierarchyLevel);
|
||||
public function getResourceHierarchyLevel(FormView $view, array $blockNameHierarchy, $hierarchyLevel);
|
||||
|
||||
/**
|
||||
* Renders a block in the given renderer resource.
|
||||
@ -135,12 +139,12 @@ interface FormRendererEngineInterface
|
||||
* or {@link getResourceForBlockHierarchy()}. The type of the resource is
|
||||
* decided by the implementation.
|
||||
*
|
||||
* @param FormViewInterface $view The view to render.
|
||||
* @param FormView $view The view to render.
|
||||
* @param mixed $resource The renderer resource.
|
||||
* @param string $block The name of the block to render.
|
||||
* @param string $blockName The name of the block to render.
|
||||
* @param array $variables The variables to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup.
|
||||
*/
|
||||
public function renderBlock(FormViewInterface $view, $resource, $block, array $variables = array());
|
||||
public function renderBlock(FormView $view, $resource, $blockName, array $variables = array());
|
||||
}
|
||||
|
@ -30,96 +30,40 @@ interface FormRendererInterface
|
||||
/**
|
||||
* Sets the theme(s) to be used for rendering a view and its children.
|
||||
*
|
||||
* @param FormViewInterface $view The view to assign the theme(s) to.
|
||||
* @param FormView $view The view to assign the theme(s) to.
|
||||
* @param mixed $themes The theme(s). The type of these themes
|
||||
* is open to the implementation.
|
||||
*/
|
||||
public function setTheme(FormViewInterface $view, $themes);
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the form tag, if necessary.
|
||||
*
|
||||
* Example usage templates:
|
||||
*
|
||||
* <form action="..." method="post" <?php echo $renderer->renderEnctype($form) ?>>
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the encoding type
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderEnctype(FormViewInterface $view);
|
||||
|
||||
/**
|
||||
* Renders the entire row for a form field.
|
||||
*
|
||||
* A row typically contains the label, errors and widget of a field.
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the row
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderRow(FormViewInterface $view, array $variables = array());
|
||||
|
||||
/**
|
||||
* Renders views which have not already been rendered.
|
||||
*
|
||||
* @param FormViewInterface $view The parent view
|
||||
* @param array $variables An array of variables
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderRest(FormViewInterface $view, array $variables = array());
|
||||
|
||||
/**
|
||||
* Renders the HTML for a given view.
|
||||
*
|
||||
* Example usage:
|
||||
*
|
||||
* <?php echo $renderer->renderWidget($form) ?>
|
||||
*
|
||||
* You can pass options during the call:
|
||||
*
|
||||
* <?php echo $renderer->renderWidget($form, array('attr' => array('class' => 'foo'))) ?>
|
||||
*
|
||||
* <?php echo $renderer->renderWidget($form, array('separator' => '+++++)) ?>
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the widget
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderWidget(FormViewInterface $view, array $variables = array());
|
||||
|
||||
/**
|
||||
* Renders the errors of the given view.
|
||||
*
|
||||
* @param FormViewInterface $view The view to render the errors for
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderErrors(FormViewInterface $view);
|
||||
|
||||
/**
|
||||
* Renders the label of the given view.
|
||||
*
|
||||
* @param FormViewInterface $view The view for which to render the label
|
||||
* @param string $label The label
|
||||
* @param array $variables Additional variables passed to the template
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderLabel(FormViewInterface $view, $label = null, array $variables = array());
|
||||
public function setTheme(FormView $view, $themes);
|
||||
|
||||
/**
|
||||
* Renders a named block of the form theme.
|
||||
*
|
||||
* @param string $block The name of the block.
|
||||
* @param array $variables The variables to pass to the template.
|
||||
* @param FormView $view The view for which to render the block.
|
||||
* @param string $blockName The name of the block.
|
||||
* @param array $variables The variables to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function renderBlock($block, array $variables = array());
|
||||
public function renderBlock(FormView $view, $blockName, array $variables = array());
|
||||
|
||||
/**
|
||||
* Searches and renders a block for a given name suffix.
|
||||
*
|
||||
* The block is searched by combining the block names stored in the
|
||||
* form view with the given suffix. If a block name is found, that
|
||||
* block is rendered.
|
||||
*
|
||||
* If this method is called recursively, the block search is continued
|
||||
* where a block was found before.
|
||||
*
|
||||
* @param FormView $view The view for which to render the block.
|
||||
* @param string $blockNameSuffix The suffix of the block name.
|
||||
* @param array $variables The variables to pass to the template.
|
||||
*
|
||||
* @return string The HTML markup
|
||||
*/
|
||||
public function searchAndRenderBlock(FormView $view, $blockNameSuffix, array $variables = array());
|
||||
|
||||
/**
|
||||
* Renders a CSRF token.
|
||||
@ -146,25 +90,6 @@ interface FormRendererInterface
|
||||
*/
|
||||
public function renderCsrfToken($intention);
|
||||
|
||||
/**
|
||||
* Returns whether the given choice is a group.
|
||||
*
|
||||
* @param mixed $choice A choice
|
||||
*
|
||||
* @return Boolean Whether the choice is a group
|
||||
*/
|
||||
public function isChoiceGroup($choice);
|
||||
|
||||
/**
|
||||
* Returns whether the given choice is selected.
|
||||
*
|
||||
* @param FormViewInterface $view The view of the choice field
|
||||
* @param ChoiceView $choice The choice to check
|
||||
*
|
||||
* @return Boolean Whether the choice is selected
|
||||
*/
|
||||
public function isChoiceSelected(FormViewInterface $view, ChoiceView $choice);
|
||||
|
||||
/**
|
||||
* Makes a technical name human readable.
|
||||
*
|
||||
|
@ -39,11 +39,11 @@ interface FormTypeExtensionInterface
|
||||
*
|
||||
* @see FormTypeInterface::buildView()
|
||||
*
|
||||
* @param FormViewInterface $view The view
|
||||
* @param FormView $view The view
|
||||
* @param FormInterface $form The form
|
||||
* @param array $options The options
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options);
|
||||
public function buildView(FormView $view, FormInterface $form, array $options);
|
||||
|
||||
/**
|
||||
* Finishes the view.
|
||||
@ -53,11 +53,11 @@ interface FormTypeExtensionInterface
|
||||
*
|
||||
* @see FormTypeInterface::finishView()
|
||||
*
|
||||
* @param FormViewInterface $view The view
|
||||
* @param FormView $view The view
|
||||
* @param FormInterface $form The form
|
||||
* @param array $options The options
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options);
|
||||
public function finishView(FormView $view, FormInterface $form, array $options);
|
||||
|
||||
/**
|
||||
* Overrides the default options from the extended type.
|
||||
|
@ -43,11 +43,11 @@ interface FormTypeInterface
|
||||
*
|
||||
* @see FormTypeExtensionInterface::buildView()
|
||||
*
|
||||
* @param FormViewInterface $view The view
|
||||
* @param FormView $view The view
|
||||
* @param FormInterface $form The form
|
||||
* @param array $options The options
|
||||
*/
|
||||
public function buildView(FormViewInterface $view, FormInterface $form, array $options);
|
||||
public function buildView(FormView $view, FormInterface $form, array $options);
|
||||
|
||||
/**
|
||||
* Finishes the form view.
|
||||
@ -62,11 +62,11 @@ interface FormTypeInterface
|
||||
*
|
||||
* @see FormTypeExtensionInterface::finishView()
|
||||
*
|
||||
* @param FormViewInterface $view The view
|
||||
* @param FormView $view The view
|
||||
* @param FormInterface $form The form
|
||||
* @param array $options The options
|
||||
*/
|
||||
public function finishView(FormViewInterface $view, FormInterface $form, array $options);
|
||||
public function finishView(FormView $view, FormInterface $form, array $options);
|
||||
|
||||
/**
|
||||
* Sets the default options for this type.
|
||||
|
@ -14,18 +14,28 @@ namespace Symfony\Component\Form;
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class FormView implements \IteratorAggregate, FormViewInterface
|
||||
class FormView implements \ArrayAccess, \IteratorAggregate, \Countable
|
||||
{
|
||||
private $name;
|
||||
|
||||
private $vars = array(
|
||||
/**
|
||||
* The variables assigned to this view.
|
||||
* @var array
|
||||
*/
|
||||
public $vars = array(
|
||||
'value' => null,
|
||||
'attr' => array(),
|
||||
);
|
||||
|
||||
private $parent;
|
||||
/**
|
||||
* The parent view.
|
||||
* @var FormView
|
||||
*/
|
||||
public $parent;
|
||||
|
||||
private $children = array();
|
||||
/**
|
||||
* The child views.
|
||||
* @var array
|
||||
*/
|
||||
public $children = array();
|
||||
|
||||
/**
|
||||
* Is the form attached to this renderer rendered?
|
||||
@ -38,23 +48,35 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
*/
|
||||
private $rendered = false;
|
||||
|
||||
public function __construct($name)
|
||||
public function __construct(FormView $parent = null)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->parent = $parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns the name of the form.
|
||||
*
|
||||
* @return string The form name.
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead which contains an
|
||||
* entry named "name".
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
return $this->vars['name'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @param string $name
|
||||
* @param mixed $value
|
||||
*
|
||||
* @return FormView The current view
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead.
|
||||
*/
|
||||
public function setVar($name, $value)
|
||||
public function set($name, $value)
|
||||
{
|
||||
$this->vars[$name] = $value;
|
||||
|
||||
@ -62,19 +84,30 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @param $name
|
||||
*
|
||||
* @return Boolean
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead.
|
||||
*/
|
||||
public function hasVar($name)
|
||||
public function has($name)
|
||||
{
|
||||
return array_key_exists($name, $this->vars);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @param $name
|
||||
* @param $default
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead.
|
||||
*/
|
||||
public function getVar($name, $default = null)
|
||||
public function get($name, $default = null)
|
||||
{
|
||||
if (false === $this->hasVar($name)) {
|
||||
if (false === $this->has($name)) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
@ -82,17 +115,23 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @return array
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead.
|
||||
*/
|
||||
public function addVars(array $vars)
|
||||
public function all()
|
||||
{
|
||||
$this->vars = array_replace($this->vars, $vars);
|
||||
|
||||
return $this;
|
||||
return $this->vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns the values of all view variables.
|
||||
*
|
||||
* @return array The values of all variables.
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead.
|
||||
*/
|
||||
public function getVars()
|
||||
{
|
||||
@ -106,6 +145,10 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
* @param string $value The value
|
||||
*
|
||||
* @return FormView The current view
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link vars} instead which contains an
|
||||
* entry named "attr".
|
||||
*/
|
||||
public function setAttribute($name, $value)
|
||||
{
|
||||
@ -115,7 +158,9 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns whether the view was already rendered.
|
||||
*
|
||||
* @return Boolean Whether this view's widget is rendered.
|
||||
*/
|
||||
public function isRendered()
|
||||
{
|
||||
@ -139,7 +184,9 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Marks the view as rendered.
|
||||
*
|
||||
* @return FormView The view object.
|
||||
*/
|
||||
public function setRendered()
|
||||
{
|
||||
@ -149,9 +196,16 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Sets the parent view.
|
||||
*
|
||||
* @param FormView $parent The parent view.
|
||||
*
|
||||
* @return FormView The view object.
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link parent} instead.
|
||||
*/
|
||||
public function setParent(FormViewInterface $parent = null)
|
||||
public function setParent(FormView $parent = null)
|
||||
{
|
||||
$this->parent = $parent;
|
||||
|
||||
@ -159,7 +213,12 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns the parent view.
|
||||
*
|
||||
* @return FormView The parent view.
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link parent} instead.
|
||||
*/
|
||||
public function getParent()
|
||||
{
|
||||
@ -167,7 +226,12 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns whether this view has a parent.
|
||||
*
|
||||
* @return Boolean Whether this view has a parent
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link parent} instead.
|
||||
*/
|
||||
public function hasParent()
|
||||
{
|
||||
@ -175,42 +239,47 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Sets the children view.
|
||||
*
|
||||
* @param array $children The children as instances of FormView
|
||||
*
|
||||
* @return FormView The current view
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link children} instead.
|
||||
*/
|
||||
public function add(FormViewInterface $child)
|
||||
public function setChildren(array $children)
|
||||
{
|
||||
$this->children[$child->getName()] = $child;
|
||||
$this->children = $children;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns the children.
|
||||
*
|
||||
* @return array The children as instances of FormView
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link children} instead.
|
||||
*/
|
||||
public function remove($name)
|
||||
{
|
||||
unset($this->children[$name]);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function all()
|
||||
public function getChildren()
|
||||
{
|
||||
return $this->children;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* Returns a given child.
|
||||
*
|
||||
* @param string $name The name of the child
|
||||
*
|
||||
* @return FormView The child view
|
||||
*
|
||||
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
|
||||
* the public property {@link children} instead.
|
||||
*/
|
||||
public function get($name)
|
||||
public function getChild($name)
|
||||
{
|
||||
if (!isset($this->children[$name])) {
|
||||
throw new \InvalidArgumentException(sprintf('Child "%s" does not exist.', $name));
|
||||
}
|
||||
|
||||
return $this->children[$name];
|
||||
}
|
||||
|
||||
@ -227,14 +296,6 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
return count($this->children) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function has($name)
|
||||
{
|
||||
return isset($this->children[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a child by name (implements \ArrayAccess).
|
||||
*
|
||||
@ -244,7 +305,7 @@ class FormView implements \IteratorAggregate, FormViewInterface
|
||||
*/
|
||||
public function offsetGet($name)
|
||||
{
|
||||
return $this->get($name);
|
||||
return $this->children[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,150 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Form;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
interface FormViewInterface extends \ArrayAccess, \Traversable, \Countable
|
||||
{
|
||||
/**
|
||||
* Returns the name of the form.
|
||||
*
|
||||
* @return string The form name.
|
||||
*/
|
||||
public function getName();
|
||||
|
||||
/**
|
||||
* Returns whether the view was already rendered.
|
||||
*
|
||||
* @return Boolean Whether this view's widget is rendered.
|
||||
*/
|
||||
public function isRendered();
|
||||
|
||||
/**
|
||||
* Marks the view as rendered.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function setRendered();
|
||||
|
||||
/**
|
||||
* Sets the parent view.
|
||||
*
|
||||
* @param FormViewInterface $parent The parent view.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function setParent(FormViewInterface $parent = null);
|
||||
|
||||
/**
|
||||
* Returns the parent view.
|
||||
*
|
||||
* @return FormViewInterface The parent view.
|
||||
*/
|
||||
public function getParent();
|
||||
|
||||
/**
|
||||
* Returns whether this view has a parent.
|
||||
*
|
||||
* @return Boolean Whether this view has a parent
|
||||
*/
|
||||
public function hasParent();
|
||||
|
||||
/**
|
||||
* Adds a child view.
|
||||
*
|
||||
* @param FormViewInterface $child The child view to add.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function add(FormViewInterface $child);
|
||||
|
||||
/**
|
||||
* Removes a child view.
|
||||
*
|
||||
* @param string $name The name of the removed child view.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function remove($name);
|
||||
|
||||
/**
|
||||
* Returns the children.
|
||||
*
|
||||
* @return array The children as instances of FormView
|
||||
*/
|
||||
public function all();
|
||||
|
||||
/**
|
||||
* Returns a given child.
|
||||
*
|
||||
* @param string $name The name of the child
|
||||
*
|
||||
* @return FormViewInterface The child view
|
||||
*/
|
||||
public function get($name);
|
||||
|
||||
/**
|
||||
* Returns whether this view has a given child.
|
||||
*
|
||||
* @param string $name The name of the child
|
||||
*
|
||||
* @return Boolean Whether the child with the given name exists
|
||||
*/
|
||||
public function has($name);
|
||||
|
||||
/**
|
||||
* Sets a view variable.
|
||||
*
|
||||
* @param string $name The variable name.
|
||||
* @param string $value The variable value.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function setVar($name, $value);
|
||||
|
||||
/**
|
||||
* Adds a list of view variables.
|
||||
*
|
||||
* @param array $values An array of variable names and values.
|
||||
*
|
||||
* @return FormViewInterface The view object.
|
||||
*/
|
||||
public function addVars(array $values);
|
||||
|
||||
/**
|
||||
* Returns whether a view variable exists.
|
||||
*
|
||||
* @param string $name The variable name.
|
||||
*
|
||||
* @return Boolean Whether the variable exists.
|
||||
*/
|
||||
public function hasVar($name);
|
||||
|
||||
/**
|
||||
* Returns the value of a view variable.
|
||||
*
|
||||
* @param string $name The variable name.
|
||||
* @param mixed $default The value to return if the variable is not set.
|
||||
*
|
||||
* @return mixed The variable value.
|
||||
*/
|
||||
public function getVar($name, $default = null);
|
||||
|
||||
/**
|
||||
* Returns the values of all view variables.
|
||||
*
|
||||
* @return array The values of all variables.
|
||||
*/
|
||||
public function getVars();
|
||||
}
|
@ -130,18 +130,17 @@ class ResolvedFormType implements ResolvedFormTypeInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function createView(FormInterface $form, FormViewInterface $parent = null)
|
||||
public function createView(FormInterface $form, FormView $parent = null)
|
||||
{
|
||||
$options = $form->getConfig()->getOptions();
|
||||
|
||||
$view = new FormView($form->getConfig()->getName());
|
||||
$view->setParent($parent);
|
||||
$view = new FormView($parent);
|
||||
|
||||
$this->buildView($view, $form, $options);
|
||||
|
||||
foreach ($form as $child) {
|
||||
foreach ($form as $name => $child) {
|
||||
/* @var FormInterface $child */
|
||||
$view->add($child->createView($view));
|
||||
$view->children[$name] = $child->createView($view);
|
||||
}
|
||||
|
||||
$this->finishView($view, $form, $options);
|
||||
@ -163,7 +162,7 @@ class ResolvedFormType implements ResolvedFormTypeInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function buildView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
private function buildView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if (null !== $this->parent) {
|
||||
$this->parent->buildView($view, $form, $options);
|
||||
@ -177,7 +176,7 @@ class ResolvedFormType implements ResolvedFormTypeInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function finishView(FormViewInterface $view, FormInterface $form, array $options)
|
||||
private function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if (null !== $this->parent) {
|
||||
$this->parent->finishView($view, $form, $options);
|
||||
|
@ -62,9 +62,9 @@ interface ResolvedFormTypeInterface
|
||||
* Creates a new form view for a form of this type.
|
||||
*
|
||||
* @param FormInterface $form The form to create a view for.
|
||||
* @param FormViewInterface $parent The parent view or null.
|
||||
* @param FormView $parent The parent view or null.
|
||||
*
|
||||
* @return FormViewInterface The created form view.
|
||||
* @return FormView The created form view.
|
||||
*/
|
||||
public function createView(FormInterface $form, FormViewInterface $parent = null);
|
||||
public function createView(FormInterface $form, FormView $parent = null);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ class CheckboxTypeTest extends TypeTestCase
|
||||
$form = $this->factory->create('checkbox', null, array('value' => 'foobar'));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals('foobar', $view->getVar('value'));
|
||||
$this->assertEquals('foobar', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testCheckedIfDataTrue()
|
||||
@ -29,7 +29,7 @@ class CheckboxTypeTest extends TypeTestCase
|
||||
$form->setData(true);
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('checked'));
|
||||
$this->assertTrue($view->vars['checked']);
|
||||
}
|
||||
|
||||
public function testCheckedIfDataTrueWithEmptyValue()
|
||||
@ -38,7 +38,7 @@ class CheckboxTypeTest extends TypeTestCase
|
||||
$form->setData(true);
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('checked'));
|
||||
$this->assertTrue($view->vars['checked']);
|
||||
}
|
||||
|
||||
public function testNotCheckedIfDataFalse()
|
||||
@ -47,7 +47,7 @@ class CheckboxTypeTest extends TypeTestCase
|
||||
$form->setData(false);
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertFalse($view->getVar('checked'));
|
||||
$this->assertFalse($view->vars['checked']);
|
||||
}
|
||||
|
||||
public function testBindWithValueChecked()
|
||||
@ -127,7 +127,7 @@ class CheckboxTypeTest extends TypeTestCase
|
||||
$form->setData($data);
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals($expected, $view->getVar('checked'));
|
||||
$this->assertEquals($expected, $view->vars['checked']);
|
||||
}
|
||||
|
||||
public function provideTransformedData()
|
||||
|
@ -537,7 +537,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('required'));
|
||||
$this->assertTrue($view->vars['required']);
|
||||
}
|
||||
|
||||
public function testPassNonRequiredToView()
|
||||
@ -548,7 +548,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertFalse($view->getVar('required'));
|
||||
$this->assertFalse($view->vars['required']);
|
||||
}
|
||||
|
||||
public function testPassMultipleToView()
|
||||
@ -559,7 +559,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('multiple'));
|
||||
$this->assertTrue($view->vars['multiple']);
|
||||
}
|
||||
|
||||
public function testPassExpandedToView()
|
||||
@ -570,7 +570,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('expanded'));
|
||||
$this->assertTrue($view->vars['expanded']);
|
||||
}
|
||||
|
||||
public function testNotPassedEmptyValueToViewIsNull()
|
||||
@ -581,7 +581,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertNull($view->getVar('empty_value'));
|
||||
$this->assertNull($view->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueToViewIsEmpty()
|
||||
@ -593,7 +593,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEmpty($view->getVar('empty_value'));
|
||||
$this->assertEmpty($view->vars['empty_value']);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -610,7 +610,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals($viewValue, $view->getVar('empty_value'));
|
||||
$this->assertEquals($viewValue, $view->vars['empty_value']);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -627,7 +627,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertNull($view->getVar('empty_value'));
|
||||
$this->assertNull($view->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function getOptionsWithEmptyValue()
|
||||
@ -658,7 +658,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
new ChoiceView('b', 'B'),
|
||||
new ChoiceView('c', 'C'),
|
||||
new ChoiceView('d', 'D'),
|
||||
), $view->getVar('choices'));
|
||||
), $view->vars['choices']);
|
||||
}
|
||||
|
||||
public function testPassPreferredChoicesToView()
|
||||
@ -673,11 +673,11 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
$this->assertEquals(array(
|
||||
0 => new ChoiceView('a', 'A'),
|
||||
2 => new ChoiceView('c', 'C'),
|
||||
), $view->getVar('choices'));
|
||||
), $view->vars['choices']);
|
||||
$this->assertEquals(array(
|
||||
1 => new ChoiceView('b', 'B'),
|
||||
3 => new ChoiceView('d', 'D'),
|
||||
), $view->getVar('preferred_choices'));
|
||||
), $view->vars['preferred_choices']);
|
||||
}
|
||||
|
||||
public function testPassHierarchicalChoicesToView()
|
||||
@ -696,7 +696,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
'Doctrine' => array(
|
||||
4 => new ChoiceView('e', 'Roman'),
|
||||
),
|
||||
), $view->getVar('choices'));
|
||||
), $view->vars['choices']);
|
||||
$this->assertEquals(array(
|
||||
'Symfony' => array(
|
||||
1 => new ChoiceView('b', 'Fabien'),
|
||||
@ -704,7 +704,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
'Doctrine' => array(
|
||||
3 => new ChoiceView('d', 'Jon'),
|
||||
),
|
||||
), $view->getVar('preferred_choices'));
|
||||
), $view->vars['preferred_choices']);
|
||||
}
|
||||
|
||||
public function testAdjustFullNameForMultipleNonExpanded()
|
||||
@ -716,7 +716,7 @@ class ChoiceTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('name[]', $view->getVar('full_name'));
|
||||
$this->assertSame('name[]', $view->vars['full_name']);
|
||||
}
|
||||
|
||||
// https://github.com/symfony/symfony/issues/3298
|
||||
|
@ -138,7 +138,7 @@ class CollectionTypeTest extends TypeTestCase
|
||||
))
|
||||
;
|
||||
|
||||
$this->assertTrue($form->createView()->getVar('multipart'));
|
||||
$this->assertTrue($form->createView()->vars['multipart']);
|
||||
}
|
||||
|
||||
public function testGetDataDoesNotContainsProtypeNameBeforeDataAreSet()
|
||||
@ -195,6 +195,6 @@ class CollectionTypeTest extends TypeTestCase
|
||||
'prototype_name' => '__test__',
|
||||
));
|
||||
|
||||
$this->assertSame('__test__label__', $form->createView()->getVar('prototype')->getVar('label'));
|
||||
$this->assertSame('__test__label__', $form->createView()->vars['prototype']->vars['label']);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ class CountryTypeTest extends LocalizedTestCase
|
||||
|
||||
$form = $this->factory->create('country');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
// Don't check objects for identity
|
||||
$this->assertContains(new ChoiceView('DE', 'Deutschland'), $choices, '', false, false);
|
||||
@ -35,10 +35,10 @@ class CountryTypeTest extends LocalizedTestCase
|
||||
{
|
||||
$form = $this->factory->create('country', 'country');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
foreach ($choices as $choice) {
|
||||
if ('ZZ' === $choice->getValue()) {
|
||||
if ('ZZ' === $choice->value) {
|
||||
$this->fail('Should not contain choice "ZZ"');
|
||||
}
|
||||
}
|
||||
|
@ -238,7 +238,7 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertEquals('datetime', $view->getVar('type'));
|
||||
$this->assertEquals('datetime', $view->vars['type']);
|
||||
}
|
||||
|
||||
public function testPassDefaultEmptyValueToViewIfNotRequired()
|
||||
@ -249,12 +249,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('', $view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('', $view['date']['year']->vars['empty_value']);
|
||||
$this->assertSame('', $view['date']['month']->vars['empty_value']);
|
||||
$this->assertSame('', $view['date']['day']->vars['empty_value']);
|
||||
$this->assertSame('', $view['time']['hour']->vars['empty_value']);
|
||||
$this->assertSame('', $view['time']['minute']->vars['empty_value']);
|
||||
$this->assertSame('', $view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassNoEmptyValueToViewIfRequired()
|
||||
@ -265,12 +265,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertNull($view['date']['year']->vars['empty_value']);
|
||||
$this->assertNull($view['date']['month']->vars['empty_value']);
|
||||
$this->assertNull($view['date']['day']->vars['empty_value']);
|
||||
$this->assertNull($view['time']['hour']->vars['empty_value']);
|
||||
$this->assertNull($view['time']['minute']->vars['empty_value']);
|
||||
$this->assertNull($view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsString()
|
||||
@ -281,12 +281,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty', $view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view['date']['year']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['date']['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['date']['day']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['time']['hour']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['time']['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsArray()
|
||||
@ -304,12 +304,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('Empty month', $view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('Empty minute', $view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['date']['year']->vars['empty_value']);
|
||||
$this->assertSame('Empty month', $view['date']['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['date']['day']->vars['empty_value']);
|
||||
$this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']);
|
||||
$this->assertSame('Empty minute', $view['time']['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addEmptyIfNotRequired()
|
||||
@ -326,12 +326,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['date']['year']->vars['empty_value']);
|
||||
$this->assertSame('', $view['date']['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['date']['day']->vars['empty_value']);
|
||||
$this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']);
|
||||
$this->assertSame('', $view['time']['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addNullIfRequired()
|
||||
@ -348,12 +348,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('date')->get('year')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('date')->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('date')->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view->get('time')->get('hour')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('time')->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('time')->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['date']['year']->vars['empty_value']);
|
||||
$this->assertNull($view['date']['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['date']['day']->vars['empty_value']);
|
||||
$this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']);
|
||||
$this->assertNull($view['time']['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['time']['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassHtml5TypeIfSingleTextAndHtml5Format()
|
||||
@ -363,7 +363,7 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('datetime', $view->getVar('type'));
|
||||
$this->assertSame('datetime', $view->vars['type']);
|
||||
}
|
||||
|
||||
public function testDontPassHtml5TypeIfNotHtml5Format()
|
||||
@ -374,7 +374,7 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->getVar('datetime'));
|
||||
$this->assertFalse(isset($view->vars['type']));
|
||||
}
|
||||
|
||||
public function testDontPassHtml5TypeIfNotSingleText()
|
||||
@ -384,6 +384,6 @@ class DateTimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->getVar('type'));
|
||||
$this->assertFalse(isset($view->vars['type']));
|
||||
}
|
||||
}
|
||||
|
@ -357,7 +357,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('2010', '2010'),
|
||||
new ChoiceView('2011', '2011'),
|
||||
), $view->get('year')->getVar('choices'));
|
||||
), $view['year']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testMonthsOption()
|
||||
@ -371,7 +371,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('6', '06'),
|
||||
new ChoiceView('7', '07'),
|
||||
), $view->get('month')->getVar('choices'));
|
||||
), $view['month']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testMonthsOptionShortFormat()
|
||||
@ -386,7 +386,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('1', 'Jän'),
|
||||
new ChoiceView('4', 'Apr')
|
||||
), $view->get('month')->getVar('choices'));
|
||||
), $view['month']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testMonthsOptionLongFormat()
|
||||
@ -401,7 +401,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('1', 'Jänner'),
|
||||
new ChoiceView('4', 'April'),
|
||||
), $view->get('month')->getVar('choices'));
|
||||
), $view['month']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testMonthsOptionLongFormatWithDifferentTimezone()
|
||||
@ -416,7 +416,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('1', 'Jänner'),
|
||||
new ChoiceView('4', 'April'),
|
||||
), $view->get('month')->getVar('choices'));
|
||||
), $view['month']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testIsDayWithinRangeReturnsTrueIfWithin()
|
||||
@ -430,7 +430,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('6', '06'),
|
||||
new ChoiceView('7', '07'),
|
||||
), $view->get('day')->getVar('choices'));
|
||||
), $view['day']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testIsPartiallyFilledReturnsFalseIfSingleText()
|
||||
@ -510,7 +510,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('date');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('{{ year }}-{{ month }}-{{ day }}', $view->getVar('date_pattern'));
|
||||
$this->assertSame('{{ year }}-{{ month }}-{{ day }}', $view->vars['date_pattern']);
|
||||
}
|
||||
|
||||
public function testPassDatePatternToViewDifferentFormat()
|
||||
@ -521,7 +521,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('{{ day }}.{{ month }}.{{ year }}', $view->getVar('date_pattern'));
|
||||
$this->assertSame('{{ day }}.{{ month }}.{{ year }}', $view->vars['date_pattern']);
|
||||
}
|
||||
|
||||
public function testPassDatePatternToViewDifferentPattern()
|
||||
@ -532,7 +532,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->getVar('date_pattern'));
|
||||
$this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->vars['date_pattern']);
|
||||
}
|
||||
|
||||
public function testDontPassDatePatternIfText()
|
||||
@ -542,7 +542,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertNull($view->getVar('date_pattern'));
|
||||
$this->assertFalse(isset($view->vars['date_pattern']));
|
||||
}
|
||||
|
||||
public function testPassWidgetToView()
|
||||
@ -552,7 +552,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('single_text', $view->getVar('widget'));
|
||||
$this->assertSame('single_text', $view->vars['widget']);
|
||||
}
|
||||
|
||||
// Bug fix
|
||||
@ -570,7 +570,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertEquals('date', $view->getVar('type'));
|
||||
$this->assertEquals('date', $view->vars['type']);
|
||||
}
|
||||
|
||||
public function testPassDefaultEmptyValueToViewIfNotRequired()
|
||||
@ -580,9 +580,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('', $view->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('', $view['year']->vars['empty_value']);
|
||||
$this->assertSame('', $view['month']->vars['empty_value']);
|
||||
$this->assertSame('', $view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassNoEmptyValueToViewIfRequired()
|
||||
@ -592,9 +592,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->get('year')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('month')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('day')->getVar('empty_value'));
|
||||
$this->assertNull($view['year']->vars['empty_value']);
|
||||
$this->assertNull($view['month']->vars['empty_value']);
|
||||
$this->assertNull($view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsString()
|
||||
@ -604,9 +604,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty', $view->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view['year']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsArray()
|
||||
@ -620,9 +620,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('Empty month', $view->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
||||
$this->assertSame('Empty month', $view['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addEmptyIfNotRequired()
|
||||
@ -636,9 +636,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('year')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
||||
$this->assertSame('', $view['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addNullIfRequired()
|
||||
@ -652,9 +652,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty year', $view->get('year')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('month')->getVar('empty_value'));
|
||||
$this->assertSame('Empty day', $view->get('day')->getVar('empty_value'));
|
||||
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
||||
$this->assertNull($view['month']->vars['empty_value']);
|
||||
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassHtml5TypeIfSingleTextAndHtml5Format()
|
||||
@ -664,7 +664,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('date', $view->getVar('type'));
|
||||
$this->assertSame('date', $view->vars['type']);
|
||||
}
|
||||
|
||||
public function testDontPassHtml5TypeIfNotHtml5Format()
|
||||
@ -675,7 +675,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->getVar('type'));
|
||||
$this->assertFalse(isset($view->vars['type']));
|
||||
}
|
||||
|
||||
public function testDontPassHtml5TypeIfNotSingleText()
|
||||
@ -685,7 +685,7 @@ class DateTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->getVar('type'));
|
||||
$this->assertFalse(isset($view->vars['type']));
|
||||
}
|
||||
|
||||
public function provideCompoundWidgets()
|
||||
@ -705,9 +705,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('date', null, array(
|
||||
'widget' => $widget,
|
||||
));
|
||||
$form->get('year')->addError($error);
|
||||
$form['year']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('year')->getErrors());
|
||||
$this->assertSame(array(), $form['year']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
|
||||
@ -720,9 +720,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('date', null, array(
|
||||
'widget' => $widget,
|
||||
));
|
||||
$form->get('month')->addError($error);
|
||||
$form['month']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('month')->getErrors());
|
||||
$this->assertSame(array(), $form['month']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
|
||||
@ -735,9 +735,9 @@ class DateTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('date', null, array(
|
||||
'widget' => $widget,
|
||||
));
|
||||
$form->get('day')->addError($error);
|
||||
$form['day']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('day')->getErrors());
|
||||
$this->assertSame(array(), $form['day']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ class FileTypeTest extends TypeTestCase
|
||||
));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals('', $view->getVar('value'));
|
||||
$this->assertEquals('', $view->vars['value']);
|
||||
}
|
||||
|
||||
private function createUploadedFileMock($name, $originalName, $valid)
|
||||
|
@ -107,9 +107,9 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->createNamed('name', 'form');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals('name', $view->getVar('id'));
|
||||
$this->assertEquals('name', $view->getVar('name'));
|
||||
$this->assertEquals('name', $view->getVar('full_name'));
|
||||
$this->assertEquals('name', $view->vars['id']);
|
||||
$this->assertEquals('name', $view->vars['name']);
|
||||
$this->assertEquals('name', $view->vars['full_name']);
|
||||
}
|
||||
|
||||
public function testStripLeadingUnderscoresAndDigitsFromId()
|
||||
@ -117,9 +117,9 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->createNamed('_09name', 'form');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertEquals('name', $view->getVar('id'));
|
||||
$this->assertEquals('_09name', $view->getVar('name'));
|
||||
$this->assertEquals('_09name', $view->getVar('full_name'));
|
||||
$this->assertEquals('name', $view->vars['id']);
|
||||
$this->assertEquals('_09name', $view->vars['name']);
|
||||
$this->assertEquals('_09name', $view->vars['full_name']);
|
||||
}
|
||||
|
||||
public function testPassIdAndNameToViewWithParent()
|
||||
@ -128,9 +128,9 @@ class FormTypeTest extends TypeTestCase
|
||||
$parent->add($this->factory->createNamed('child', 'form'));
|
||||
$view = $parent->createView();
|
||||
|
||||
$this->assertEquals('parent_child', $view['child']->getVar('id'));
|
||||
$this->assertEquals('child', $view['child']->getVar('name'));
|
||||
$this->assertEquals('parent[child]', $view['child']->getVar('full_name'));
|
||||
$this->assertEquals('parent_child', $view['child']->vars['id']);
|
||||
$this->assertEquals('child', $view['child']->vars['name']);
|
||||
$this->assertEquals('parent[child]', $view['child']->vars['full_name']);
|
||||
}
|
||||
|
||||
public function testPassIdAndNameToViewWithGrandParent()
|
||||
@ -140,9 +140,9 @@ class FormTypeTest extends TypeTestCase
|
||||
$parent['child']->add($this->factory->createNamed('grand_child', 'form'));
|
||||
$view = $parent->createView();
|
||||
|
||||
$this->assertEquals('parent_child_grand_child', $view['child']['grand_child']->getVar('id'));
|
||||
$this->assertEquals('grand_child', $view['child']['grand_child']->getVar('name'));
|
||||
$this->assertEquals('parent[child][grand_child]', $view['child']['grand_child']->getVar('full_name'));
|
||||
$this->assertEquals('parent_child_grand_child', $view['child']['grand_child']->vars['id']);
|
||||
$this->assertEquals('grand_child', $view['child']['grand_child']->vars['name']);
|
||||
$this->assertEquals('parent[child][grand_child]', $view['child']['grand_child']->vars['full_name']);
|
||||
}
|
||||
|
||||
public function testNonReadOnlyFormWithReadOnlyParentBeingReadOnly()
|
||||
@ -151,7 +151,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertTrue($view['child']->getVar('read_only'));
|
||||
$this->assertTrue($view['child']->vars['read_only']);
|
||||
}
|
||||
|
||||
public function testReadOnlyFormWithNonReadOnlyParentBeingReadOnly()
|
||||
@ -160,7 +160,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form', null, array('read_only' => true));
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertTrue($view['child']->getVar('read_only'));
|
||||
$this->assertTrue($view['child']->vars['read_only']);
|
||||
}
|
||||
|
||||
public function testNonReadOnlyFormWithNonReadOnlyParentBeingNonReadOnly()
|
||||
@ -169,7 +169,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertFalse($view['child']->getVar('read_only'));
|
||||
$this->assertFalse($view['child']->vars['read_only']);
|
||||
}
|
||||
|
||||
public function testPassMaxLengthToView()
|
||||
@ -177,7 +177,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->create('form', null, array('max_length' => 10));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame(10, $view->getVar('max_length'));
|
||||
$this->assertSame(10, $view->vars['max_length']);
|
||||
}
|
||||
|
||||
public function testPassTranslationDomainToView()
|
||||
@ -185,7 +185,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->create('form', null, array('translation_domain' => 'test'));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('test', $view->getVar('translation_domain'));
|
||||
$this->assertSame('test', $view->vars['translation_domain']);
|
||||
}
|
||||
|
||||
public function testNonTranslationDomainFormWithTranslationDomainParentBeingTranslationDomain()
|
||||
@ -194,7 +194,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertEquals('test', $view['child']->getVar('translation_domain'));
|
||||
$this->assertEquals('test', $view['child']->vars['translation_domain']);
|
||||
}
|
||||
|
||||
public function testTranslationDomainFormWithNonTranslationDomainParentBeingTranslationDomain()
|
||||
@ -203,7 +203,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form', null, array('translation_domain' => 'test'));
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertEquals('test', $view['child']->getVar('translation_domain'));
|
||||
$this->assertEquals('test', $view['child']->vars['translation_domain']);
|
||||
}
|
||||
|
||||
public function testNonTranlsationDomainFormWithNonTranslationDomainParentBeingTranslationDomainDefault()
|
||||
@ -212,7 +212,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$child = $this->factory->createNamed('child', 'form');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertEquals('messages', $view['child']->getVar('translation_domain'));
|
||||
$this->assertEquals('messages', $view['child']->vars['translation_domain']);
|
||||
}
|
||||
|
||||
public function testPassLabelToView()
|
||||
@ -220,7 +220,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->createNamed('__test___field', 'form', null, array('label' => 'My label'));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('My label', $view->getVar('label'));
|
||||
$this->assertSame('My label', $view->vars['label']);
|
||||
}
|
||||
|
||||
public function testDefaultTranslationDomain()
|
||||
@ -228,7 +228,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->create('form');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('messages', $view->getVar('translation_domain'));
|
||||
$this->assertSame('messages', $view->vars['translation_domain']);
|
||||
}
|
||||
|
||||
public function testBindWithEmptyDataCreatesObjectIfClassAvailable()
|
||||
@ -386,7 +386,7 @@ class FormTypeTest extends TypeTestCase
|
||||
|
||||
$this->assertFalse($form->isEmpty());
|
||||
|
||||
$this->assertSame($dataAsString, $view->getVar('value'));
|
||||
$this->assertSame($dataAsString, $view->vars['value']);
|
||||
$this->assertSame($dataAsString, $form->getData());
|
||||
}
|
||||
|
||||
@ -526,7 +526,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form = $this->factory->create('form');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertFalse($view->getVar('multipart'));
|
||||
$this->assertFalse($view->vars['multipart']);
|
||||
}
|
||||
|
||||
public function testPassMultipartTrueIfAnyChildIsMultipartToView()
|
||||
@ -536,7 +536,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form->add($this->factory->create('file'));
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertTrue($view->getVar('multipart'));
|
||||
$this->assertTrue($view->vars['multipart']);
|
||||
}
|
||||
|
||||
public function testCreateViewDoNoMarkItAsRendered()
|
||||
@ -622,7 +622,7 @@ class FormTypeTest extends TypeTestCase
|
||||
{
|
||||
$form = $this->factory->create('form');
|
||||
$view = $form->createView();
|
||||
$this->assertTrue($view->getVar('valid'));
|
||||
$this->assertTrue($view->vars['valid']);
|
||||
}
|
||||
|
||||
public function testViewNotValidBound()
|
||||
@ -631,7 +631,7 @@ class FormTypeTest extends TypeTestCase
|
||||
$form->bind(array());
|
||||
$form->addError(new FormError('An error'));
|
||||
$view = $form->createView();
|
||||
$this->assertFalse($view->getVar('valid'));
|
||||
$this->assertFalse($view->vars['valid']);
|
||||
}
|
||||
|
||||
public function testDataOptionSupersedesSetDataCalls()
|
||||
|
@ -21,7 +21,7 @@ class LanguageTypeTest extends LocalizedTestCase
|
||||
|
||||
$form = $this->factory->create('language');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
$this->assertContains(new ChoiceView('en', 'Englisch'), $choices, '', false, false);
|
||||
$this->assertContains(new ChoiceView('en_GB', 'Britisches Englisch'), $choices, '', false, false);
|
||||
@ -34,7 +34,7 @@ class LanguageTypeTest extends LocalizedTestCase
|
||||
{
|
||||
$form = $this->factory->create('language', 'language');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
$this->assertNotContains(new ChoiceView('mul', 'Mehrsprachig'), $choices, '', false, false);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ class LocaleTypeTest extends LocalizedTestCase
|
||||
|
||||
$form = $this->factory->create('locale');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
$this->assertContains(new ChoiceView('en', 'Englisch'), $choices, '', false, false);
|
||||
$this->assertContains(new ChoiceView('en_GB', 'Englisch (Vereinigtes Königreich)'), $choices, '', false, false);
|
||||
|
@ -20,7 +20,7 @@ class MoneyTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('money');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('{{ widget }} €', $view->getVar('money_pattern'));
|
||||
$this->assertSame('{{ widget }} €', $view->vars['money_pattern']);
|
||||
}
|
||||
|
||||
public function testMoneyPatternWorksForYen()
|
||||
@ -29,6 +29,6 @@ class MoneyTypeTest extends LocalizedTestCase
|
||||
|
||||
$form = $this->factory->create('money', null, array('currency' => 'JPY'));
|
||||
$view = $form->createView();
|
||||
$this->assertTrue((Boolean) strstr($view->getVar('money_pattern'), '¥'));
|
||||
$this->assertTrue((Boolean) strstr($view->vars['money_pattern'], '¥'));
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ class NumberTypeTest extends LocalizedTestCase
|
||||
$form->setData('12345.67890');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('12345,679', $view->getVar('value'));
|
||||
$this->assertSame('12345,679', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testDefaultFormattingWithGrouping()
|
||||
@ -35,7 +35,7 @@ class NumberTypeTest extends LocalizedTestCase
|
||||
$form->setData('12345.67890');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('12.345,679', $view->getVar('value'));
|
||||
$this->assertSame('12.345,679', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testDefaultFormattingWithPrecision()
|
||||
@ -44,7 +44,7 @@ class NumberTypeTest extends LocalizedTestCase
|
||||
$form->setData('12345.67890');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('12345,68', $view->getVar('value'));
|
||||
$this->assertSame('12345,68', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testDefaultFormattingWithRounding()
|
||||
@ -53,6 +53,6 @@ class NumberTypeTest extends LocalizedTestCase
|
||||
$form->setData('12345.54321');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('12346', $view->getVar('value'));
|
||||
$this->assertSame('12346', $view->vars['value']);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ class PasswordTypeTest extends TypeTestCase
|
||||
$form->setData('pAs5w0rd');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('', $view->getVar('value'));
|
||||
$this->assertSame('', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testEmptyIfBound()
|
||||
@ -28,7 +28,7 @@ class PasswordTypeTest extends TypeTestCase
|
||||
$form->bind('pAs5w0rd');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('', $view->getVar('value'));
|
||||
$this->assertSame('', $view->vars['value']);
|
||||
}
|
||||
|
||||
public function testNotEmptyIfBoundAndNotAlwaysEmpty()
|
||||
@ -37,6 +37,6 @@ class PasswordTypeTest extends TypeTestCase
|
||||
$form->bind('pAs5w0rd');
|
||||
$view = $form->createView();
|
||||
|
||||
$this->assertSame('pAs5w0rd', $view->getVar('value'));
|
||||
$this->assertSame('pAs5w0rd', $view->vars['value']);
|
||||
}
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('6', '06'),
|
||||
new ChoiceView('7', '07'),
|
||||
), $view->get('hour')->getVar('choices'));
|
||||
), $view['hour']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testIsMinuteWithinRange_returnsTrueIfWithin()
|
||||
@ -260,7 +260,7 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('6', '06'),
|
||||
new ChoiceView('7', '07'),
|
||||
), $view->get('minute')->getVar('choices'));
|
||||
), $view['minute']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testIsSecondWithinRange_returnsTrueIfWithin()
|
||||
@ -275,7 +275,7 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
$this->assertEquals(array(
|
||||
new ChoiceView('6', '06'),
|
||||
new ChoiceView('7', '07'),
|
||||
), $view->get('second')->getVar('choices'));
|
||||
), $view['second']->vars['choices']);
|
||||
}
|
||||
|
||||
public function testIsPartiallyFilled_returnsFalseIfCompletelyEmpty()
|
||||
@ -415,7 +415,7 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertEquals('time', $view->getVar('type'));
|
||||
$this->assertEquals('time', $view->vars['type']);
|
||||
}
|
||||
|
||||
public function testPassDefaultEmptyValueToViewIfNotRequired()
|
||||
@ -426,9 +426,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('', $view->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('', $view['hour']->vars['empty_value']);
|
||||
$this->assertSame('', $view['minute']->vars['empty_value']);
|
||||
$this->assertSame('', $view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassNoEmptyValueToViewIfRequired()
|
||||
@ -439,9 +439,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertNull($view->get('hour')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('minute')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('second')->getVar('empty_value'));
|
||||
$this->assertNull($view['hour']->vars['empty_value']);
|
||||
$this->assertNull($view['minute']->vars['empty_value']);
|
||||
$this->assertNull($view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsString()
|
||||
@ -452,9 +452,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty', $view->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty', $view['hour']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty', $view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsArray()
|
||||
@ -469,9 +469,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty hour', $view->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('Empty minute', $view->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view['hour']->vars['empty_value']);
|
||||
$this->assertSame('Empty minute', $view['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addEmptyIfNotRequired()
|
||||
@ -486,9 +486,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty hour', $view->get('hour')->getVar('empty_value'));
|
||||
$this->assertSame('', $view->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view['hour']->vars['empty_value']);
|
||||
$this->assertSame('', $view['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function testPassEmptyValueAsPartialArray_addNullIfRequired()
|
||||
@ -503,9 +503,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
));
|
||||
|
||||
$view = $form->createView();
|
||||
$this->assertSame('Empty hour', $view->get('hour')->getVar('empty_value'));
|
||||
$this->assertNull($view->get('minute')->getVar('empty_value'));
|
||||
$this->assertSame('Empty second', $view->get('second')->getVar('empty_value'));
|
||||
$this->assertSame('Empty hour', $view['hour']->vars['empty_value']);
|
||||
$this->assertNull($view['minute']->vars['empty_value']);
|
||||
$this->assertSame('Empty second', $view['second']->vars['empty_value']);
|
||||
}
|
||||
|
||||
public function provideCompoundWidgets()
|
||||
@ -525,9 +525,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('time', null, array(
|
||||
'widget' => $widget,
|
||||
));
|
||||
$form->get('hour')->addError($error);
|
||||
$form['hour']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('hour')->getErrors());
|
||||
$this->assertSame(array(), $form['hour']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
|
||||
@ -540,9 +540,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
$form = $this->factory->create('time', null, array(
|
||||
'widget' => $widget,
|
||||
));
|
||||
$form->get('minute')->addError($error);
|
||||
$form['minute']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('minute')->getErrors());
|
||||
$this->assertSame(array(), $form['minute']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
|
||||
@ -556,9 +556,9 @@ class TimeTypeTest extends LocalizedTestCase
|
||||
'widget' => $widget,
|
||||
'with_seconds' => true,
|
||||
));
|
||||
$form->get('second')->addError($error);
|
||||
$form['second']->addError($error);
|
||||
|
||||
$this->assertSame(array(), $form->get('second')->getErrors());
|
||||
$this->assertSame(array(), $form['second']->getErrors());
|
||||
$this->assertSame(array($error), $form->getErrors());
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ class TimezoneTypeTest extends TypeTestCase
|
||||
{
|
||||
$form = $this->factory->create('timezone');
|
||||
$view = $form->createView();
|
||||
$choices = $view->getVar('choices');
|
||||
$choices = $view->vars['choices'];
|
||||
|
||||
$this->assertArrayHasKey('Africa', $choices);
|
||||
$this->assertContains(new ChoiceView('Africa/Kinshasa', 'Kinshasa'), $choices['Africa'], '', false, false);
|
||||
|
@ -65,7 +65,7 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
))
|
||||
->createView();
|
||||
|
||||
$this->assertTrue($view->has('csrf'));
|
||||
$this->assertTrue(isset($view['csrf']));
|
||||
}
|
||||
|
||||
public function testNoCsrfProtectionByDefaultIfCompoundButNotRoot()
|
||||
@ -79,10 +79,10 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
))
|
||||
)
|
||||
->getForm()
|
||||
->createView()
|
||||
->get('form');
|
||||
->get('form')
|
||||
->createView();
|
||||
|
||||
$this->assertFalse($view->has('csrf'));
|
||||
$this->assertFalse(isset($view['csrf']));
|
||||
}
|
||||
|
||||
public function testNoCsrfProtectionByDefaultIfRootButNotCompound()
|
||||
@ -94,7 +94,7 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
))
|
||||
->createView();
|
||||
|
||||
$this->assertFalse($view->has('csrf'));
|
||||
$this->assertFalse(isset($view['csrf']));
|
||||
}
|
||||
|
||||
public function testCsrfProtectionCanBeDisabled()
|
||||
@ -107,7 +107,7 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
))
|
||||
->createView();
|
||||
|
||||
$this->assertFalse($view->has('csrf'));
|
||||
$this->assertFalse(isset($view['csrf']));
|
||||
}
|
||||
|
||||
public function testGenerateCsrfToken()
|
||||
@ -126,7 +126,7 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
))
|
||||
->createView();
|
||||
|
||||
$this->assertEquals('token', $view->get('csrf')->getVar('value'));
|
||||
$this->assertEquals('token', $view['csrf']->vars['value']);
|
||||
}
|
||||
|
||||
public function provideBoolean()
|
||||
@ -250,9 +250,9 @@ class FormTypeCsrfExtensionTest extends TypeTestCase
|
||||
'allow_add' => true,
|
||||
))
|
||||
->createView()
|
||||
->getVar('prototype');
|
||||
->vars['prototype'];
|
||||
|
||||
$this->assertFalse($prototypeView->has('csrf'));
|
||||
$this->assertFalse(isset($prototypeView['csrf']));
|
||||
$this->assertCount(1, $prototypeView);
|
||||
}
|
||||
}
|
||||
|
@ -1,105 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Form;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
||||
|
||||
class FormRendererTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $engine;
|
||||
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
private $csrfProvider;
|
||||
|
||||
/**
|
||||
* @var FormRenderer
|
||||
*/
|
||||
private $renderer;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->engine = $this->getMock('Symfony\Component\Form\FormRendererEngineInterface');
|
||||
$this->csrfProvider = $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface');
|
||||
$this->renderer = new FormRenderer($this->engine, $this->csrfProvider);
|
||||
}
|
||||
|
||||
public function isChoiceGroupProvider()
|
||||
{
|
||||
return array(
|
||||
array(false, 0),
|
||||
array(false, '0'),
|
||||
array(false, '1'),
|
||||
array(false, 1),
|
||||
array(false, ''),
|
||||
array(false, null),
|
||||
array(false, true),
|
||||
|
||||
array(true, array()),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider isChoiceGroupProvider
|
||||
*/
|
||||
public function testIsChoiceGroup($expected, $value)
|
||||
{
|
||||
$this->assertSame($expected, $this->renderer->isChoiceGroup($value));
|
||||
}
|
||||
|
||||
public function testIsChoiceGroupPart2()
|
||||
{
|
||||
$this->assertTrue($this->renderer->isChoiceGroup(new \SplFixedArray(1)));
|
||||
}
|
||||
|
||||
public function isChoiceSelectedProvider()
|
||||
{
|
||||
// The commented cases should not be necessary anymore, because the
|
||||
// choice lists should assure that both values passed here are always
|
||||
// strings
|
||||
return array(
|
||||
// array(true, 0, 0),
|
||||
array(true, '0', '0'),
|
||||
array(true, '1', '1'),
|
||||
// array(true, false, 0),
|
||||
// array(true, true, 1),
|
||||
array(true, '', ''),
|
||||
// array(true, null, ''),
|
||||
array(true, '1.23', '1.23'),
|
||||
array(true, 'foo', 'foo'),
|
||||
array(true, 'foo10', 'foo10'),
|
||||
array(true, 'foo', array(1, 'foo', 'foo10')),
|
||||
|
||||
array(false, 10, array(1, 'foo', 'foo10')),
|
||||
array(false, 0, array(1, 'foo', 'foo10')),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider isChoiceSelectedProvider
|
||||
*/
|
||||
public function testIsChoiceSelected($expected, $choice, $value)
|
||||
{
|
||||
$view = new FormView('name');
|
||||
$view->setVar('value', $value);
|
||||
$choice = new ChoiceView($choice, $choice . ' label');
|
||||
|
||||
$this->assertSame($expected, $this->renderer->isChoiceSelected($view, $choice));
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Form\Tests;
|
||||
|
||||
interface FormViewInterface extends \Iterator, \Symfony\Component\Form\FormViewInterface
|
||||
{
|
||||
}
|
@ -13,7 +13,6 @@ namespace Symfony\Component\Form\Tests;
|
||||
|
||||
use Symfony\Component\Form\ResolvedFormType;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\FormViewInterface;
|
||||
use Symfony\Component\Form\FormBuilder;
|
||||
use Symfony\Component\Form\FormConfig;
|
||||
use Symfony\Component\Form\Form;
|
||||
@ -171,7 +170,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
|
||||
$i = 0;
|
||||
|
||||
$assertIndexAndNbOfChildViews = function ($index, $nbOfChildViews) use (&$i, $test) {
|
||||
return function (FormViewInterface $view) use (&$i, $test, $index, $nbOfChildViews) {
|
||||
return function (FormView $view) use (&$i, $test, $index, $nbOfChildViews) {
|
||||
/* @var \PHPUnit_Framework_TestCase $test */
|
||||
$test->assertEquals($index, $i, 'Executed at index ' . $index);
|
||||
$test->assertCount($nbOfChildViews, $view);
|
||||
@ -242,10 +241,10 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
|
||||
->with($this->anything(), $form, $options)
|
||||
->will($this->returnCallback($assertIndexAndNbOfChildViews(11, 2)));
|
||||
|
||||
$parentView = new FormView('parent');
|
||||
$parentView = new FormView();
|
||||
$view = $resolvedType->createView($form, $parentView);
|
||||
|
||||
$this->assertSame($parentView, $view->getParent());
|
||||
$this->assertSame($parentView, $view->parent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -582,7 +582,7 @@ class SimpleFormTest extends AbstractFormTest
|
||||
public function testCreateView()
|
||||
{
|
||||
$type = $this->getMock('Symfony\Component\Form\ResolvedFormTypeInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\Tests\FormViewInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\FormView');
|
||||
$form = $this->getBuilder()->setType($type)->getForm();
|
||||
|
||||
$type->expects($this->once())
|
||||
@ -596,9 +596,9 @@ class SimpleFormTest extends AbstractFormTest
|
||||
public function testCreateViewWithParent()
|
||||
{
|
||||
$type = $this->getMock('Symfony\Component\Form\ResolvedFormTypeInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\Tests\FormViewInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\FormView');
|
||||
$parentForm = $this->getMock('Symfony\Component\Form\Tests\FormInterface');
|
||||
$parentView = $this->getMock('Symfony\Component\Form\Tests\FormViewInterface');
|
||||
$parentView = $this->getMock('Symfony\Component\Form\FormView');
|
||||
$form = $this->getBuilder()->setType($type)->getForm();
|
||||
$form->setParent($parentForm);
|
||||
|
||||
@ -617,8 +617,8 @@ class SimpleFormTest extends AbstractFormTest
|
||||
public function testCreateViewWithExplicitParent()
|
||||
{
|
||||
$type = $this->getMock('Symfony\Component\Form\ResolvedFormTypeInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\Tests\FormViewInterface');
|
||||
$parentView = $this->getMock('Symfony\Component\Form\Tests\FormViewInterface');
|
||||
$view = $this->getMock('Symfony\Component\Form\FormView');
|
||||
$parentView = $this->getMock('Symfony\Component\Form\FormView');
|
||||
$form = $this->getBuilder()->setType($type)->getForm();
|
||||
|
||||
$type->expects($this->once())
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user