feature #28635 [Form] Add label_translation_parameters, help_translation_parameters and attr_translation_parameters options to base form type (webnet-fr)

This PR was squashed before being merged into the 4.3-dev branch (closes #28635).

Discussion
----------

[Form] Add label_translation_parameters, help_translation_parameters and attr_translation_parameters options to base form type

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes. Travis-ci isn't green because it tests the components separately. Fabbot.io requires license headers in files where they were not present before.
| Fixed tickets | #27698
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/10065

Hi, this is an alternative to #27775.

`translation_parameters` is separated to `label_translation_parameters`, `help_translation_parameters`, `attr_translation_parameters`.

Commits
-------

b3f3c5361f [Form] Add label_translation_parameters, help_translation_parameters and attr_translation_parameters options to base form type
This commit is contained in:
Fabien Potencier 2019-02-13 08:24:11 +01:00
commit 09275d4e27
22 changed files with 525 additions and 80 deletions

View File

@ -1366,6 +1366,180 @@ class EntityTypeTest extends BaseTypeTest
$this->assertNull($view['child']->vars['translation_domain']);
}
public function testPassLabelTranslationParametersToView()
{
$view = $this->factory->create(static::TESTED_TYPE, null, [
'label_translation_parameters' => ['%param%' => 'value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['label_translation_parameters']);
}
public function testPassHelpTranslationParametersToView()
{
$view = $this->factory->create(static::TESTED_TYPE, null, [
'help_translation_parameters' => ['%param%' => 'value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['help_translation_parameters']);
}
public function testPassAttrTranslationParametersToView()
{
$view = $this->factory->create(static::TESTED_TYPE, null, [
'attr_translation_parameters' => ['%param%' => 'value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['attr_translation_parameters']);
}
public function testInheritLabelTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'label_translation_parameters' => ['%param%' => 'value'],
])
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['label_translation_parameters']);
}
public function testInheritHelpTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'help_translation_parameters' => ['%param%' => 'value'],
])
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['help_translation_parameters']);
}
public function testInheritAttrTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'attr_translation_parameters' => ['%param%' => 'value'],
])
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['attr_translation_parameters']);
}
public function testPreferOwnLabelTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'label_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', static::TESTED_TYPE, [
'label_translation_parameters' => ['%override_param%' => 'child_value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['label_translation_parameters']);
}
public function testPreferOwnHelpTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'help_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', static::TESTED_TYPE, [
'help_translation_parameters' => ['%override_param%' => 'child_value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['help_translation_parameters']);
}
public function testPreferOwnAttrTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'attr_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', static::TESTED_TYPE, [
'attr_translation_parameters' => ['%override_param%' => 'child_value'],
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['attr_translation_parameters']);
}
public function testDefaultLabelTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['label_translation_parameters']);
}
public function testDefaultHelpTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['help_translation_parameters']);
}
public function testDefaultAttrTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', static::TESTED_TYPE, [
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
])
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['attr_translation_parameters']);
}
public function testPassLabelToView()
{
$view = $this->factory->createNamed('__test___field', static::TESTED_TYPE, null, [

View File

@ -27,7 +27,7 @@
"require-dev": {
"symfony/stopwatch": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4|~4.0",
"symfony/form": "~3.4|~4.0",
"symfony/form": "~4.3",
"symfony/http-kernel": "~3.4|~4.0",
"symfony/messenger": "~4.2",
"symfony/property-access": "~3.4|~4.0",
@ -47,6 +47,7 @@
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/dependency-injection": "<3.4",
"symfony/form": "<4.3",
"symfony/messenger": "<4.2"
},
"suggest": {

View File

@ -187,9 +187,9 @@
{%- endif -%}
{%- else -%}
{%- if help_html is same as(false) -%}
{{- help|trans({}, translation_domain) -}}
{{- help|trans(help_translation_parameters, translation_domain) -}}
{%- else -%}
{{- help|trans({}, translation_domain)|raw -}}
{{- help|trans(help_translation_parameters, translation_domain)|raw -}}
{%- endif -%}
{%- endif -%}
</span>

View File

@ -219,7 +219,7 @@
{% set label = name|humanize %}
{%- endif -%}
{%- endif -%}
<{{ element|default('label') }}{% if label_attr %}{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}{% endif %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}{% block form_label_errors %}{{- form_errors(form) -}}{% endblock form_label_errors %}</{{ element|default('label') }}>
<{{ element|default('label') }}{% if label_attr %}{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}{% endif %}>{{ translation_domain is same as(false) ? label : label|trans(label_translation_parameters, translation_domain) }}{% block form_label_errors %}{{- form_errors(form) -}}{% endblock form_label_errors %}</{{ element|default('label') }}>
{%- else -%}
{%- if errors|length > 0 -%}
<div id="{{ id }}_errors" class="mb-2">
@ -312,9 +312,9 @@
{%- endif -%}
{%- else -%}
{%- if help_html is same as(false) -%}
{{- help|trans({}, translation_domain) -}}
{{- help|trans(help_translation_parameters, translation_domain) -}}
{%- else -%}
{{- help|trans({}, translation_domain)|raw -}}
{{- help|trans(help_translation_parameters, translation_domain)|raw -}}
{%- endif -%}
{%- endif -%}
</small>

View File

@ -232,7 +232,7 @@
{% set label = name|humanize %}
{%- endif -%}
{%- endif -%}
<button type="{{ type|default('button') }}" {{ block('button_attributes') }}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</button>
<button type="{{ type|default('button') }}" {{ block('button_attributes') }}>{{ translation_domain is same as(false) ? label : label|trans(label_translation_parameters, translation_domain) }}</button>
{%- endblock button_widget -%}
{%- block submit_widget -%}
@ -279,7 +279,7 @@
{%- if translation_domain is same as(false) -%}
{{- label -}}
{%- else -%}
{{- label|trans({}, translation_domain) -}}
{{- label|trans(label_translation_parameters, translation_domain) -}}
{%- endif -%}
</{{ element|default('label') }}>
{%- endif -%}
@ -301,9 +301,9 @@
{%- endif -%}
{%- else -%}
{%- if help_html is same as(false) -%}
{{- help|trans({}, translation_domain) -}}
{{- help|trans(help_translation_parameters, translation_domain) -}}
{%- else -%}
{{- help|trans({}, translation_domain)|raw -}}
{{- help|trans(help_translation_parameters, translation_domain)|raw -}}
{%- endif -%}
{%- endif -%}
</p>
@ -433,7 +433,7 @@
{%- for attrname, attrvalue in attr -%}
{{- " " -}}
{%- if attrname in ['placeholder', 'title'] -%}
{{- attrname }}="{{ translation_domain is same as(false) ? attrvalue : attrvalue|trans({}, translation_domain) }}"
{{- attrname }}="{{ translation_domain is same as(false) ? attrvalue : attrvalue|trans(attr_translation_parameters, translation_domain) }}"
{%- elseif attrvalue is same as(true) -%}
{{- attrname }}="{{ attrname }}"
{%- elseif attrvalue is not same as(false) -%}

View File

@ -17,6 +17,6 @@ class StubTranslator implements TranslatorInterface
{
public function trans($id, array $parameters = [], $domain = null, $locale = null)
{
return '[trans]'.$id.'[/trans]';
return '[trans]'.strtr($id, $parameters).'[/trans]';
}
}

View File

@ -11,7 +11,7 @@
{% if label is empty %}
{% set label = name|humanize %}
{% endif %}
<label>Custom label: {{ label|trans({}, translation_domain) }}</label>
<label>Custom label: {{ label|trans(label_translation_parameters, translation_domain) }}</label>
{% endspaceless %}
{% endblock _names_entry_label %}
@ -20,6 +20,6 @@
{% if label is empty %}
{% set label = name|humanize %}
{% endif %}
<label>Custom name label: {{ label|trans({}, translation_domain) }}</label>
<label>Custom name label: {{ label|trans(label_translation_parameters, translation_domain) }}</label>
{% endspaceless %}
{% endblock _name_c_entry_label %}

View File

@ -1,6 +1,6 @@
<?php foreach ($attr as $k => $v): ?>
<?php if ('placeholder' === $k || 'title' === $k): ?>
<?php printf('%s="%s" ', $view->escape($k), $view->escape(false !== $translation_domain ? $view['translator']->trans($v, [], $translation_domain) : $v)) ?>
<?php printf('%s="%s" ', $view->escape($k), $view->escape(false !== $translation_domain ? $view['translator']->trans($v, $attr_translation_parameters, $translation_domain) : $v)) ?>
<?php elseif (true === $v): ?>
<?php printf('%s="%s" ', $view->escape($k), $view->escape($k)) ?>
<?php elseif (false !== $v): ?>

View File

@ -1,4 +1,4 @@
<?php if (!$label) { $label = isset($label_format)
? strtr($label_format, ['%name%' => $name, '%id%' => $id])
: $view['form']->humanize($name); } ?>
<button type="<?php echo isset($type) ? $view->escape($type) : 'button' ?>" <?php echo $view['form']->block($form, 'button_attributes') ?>><?php echo $view->escape(false !== $translation_domain ? $view['translator']->trans($label, [], $translation_domain) : $label) ?></button>
<button type="<?php echo isset($type) ? $view->escape($type) : 'button' ?>" <?php echo $view['form']->block($form, 'button_attributes') ?>><?php echo $view->escape(false !== $translation_domain ? $view['translator']->trans($label, $label_translation_parameters, $translation_domain) : $label) ?></button>

View File

@ -1,6 +1,6 @@
<?php if (!empty($help)): ?>
<?php $help_attr['class'] = isset($help_attr['class']) ? trim($help_attr['class'].' help-text') : 'help-text'; ?>
<?php $help = false !== $translation_domain ? $view['translator']->trans($help, [], $translation_domain) : $help; ?>
<?php $help = false !== $translation_domain ? $view['translator']->trans($help, $help_translation_parameters, $translation_domain) : $help; ?>
<?php $help = false === $help_html ? $view->escape($help) : $help ?>
<p id="<?php echo $view->escape($id); ?>_help" <?php echo ' '.$view['form']->block($form, 'attributes', ['attr' => $help_attr]); ?>><?php echo $help; ?></p>
<?php endif; ?>

View File

@ -4,5 +4,5 @@
<?php if (!$label) { $label = isset($label_format)
? strtr($label_format, ['%name%' => $name, '%id%' => $id])
: $view['form']->humanize($name); } ?>
<label<?php if ($label_attr) { echo ' '.$view['form']->block($form, 'attributes', ['attr' => $label_attr]); } ?>><?php echo $view->escape(false !== $translation_domain ? $view['translator']->trans($label, [], $translation_domain) : $label) ?></label>
<label<?php if ($label_attr) { echo ' '.$view['form']->block($form, 'attributes', ['attr' => $label_attr]); } ?>><?php echo $view->escape(false !== $translation_domain ? $view['translator']->trans($label, $label_translation_parameters, $translation_domain) : $label) ?></label>
<?php endif ?>

View File

@ -17,6 +17,6 @@ class StubTranslator implements TranslatorInterface
{
public function trans($id, array $parameters = [], $domain = null, $locale = null)
{
return '[trans]'.$id.'[/trans]';
return '[trans]'.strtr($id, $parameters).'[/trans]';
}
}

View File

@ -8,6 +8,30 @@ CHANGELOG
option is set to `single_text`
* added `block_prefix` option to `BaseType`.
* added `help_html` option to display the `help` text as HTML.
* added `label_translation_parameters`, `attr_translation_parameters`, `help_translation_parameters` options
to `FormType` to pass translation parameters to form labels, attributes (`placeholder` and `title`) and help text respectively.
The passed parameters will replace placeholders in translation messages.
```php
class OrderType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('comment', TextType::class, [
'label' => 'Comment to the order to %company%',
'label_translation_parameters' => [
'%company%' => 'Acme',
],
'help' => 'The address of the %company% is %address%',
'help_translation_parameters' => [
'%company%' => 'Acme Ltd.',
'%address%' => '4 Form street, Symfonyville',
],
])
}
}
```
4.2.0
-----

View File

@ -44,6 +44,8 @@ abstract class BaseType extends AbstractType
$name = $form->getName();
$blockName = $options['block_name'] ?: $form->getName();
$translationDomain = $options['translation_domain'];
$labelTranslationParameters = $options['label_translation_parameters'];
$attrTranslationParameters = $options['attr_translation_parameters'];
$labelFormat = $options['label_format'];
if ($view->parent) {
@ -61,6 +63,9 @@ abstract class BaseType extends AbstractType
$translationDomain = $view->parent->vars['translation_domain'];
}
$labelTranslationParameters = array_merge($view->parent->vars['label_translation_parameters'], $labelTranslationParameters);
$attrTranslationParameters = array_merge($view->parent->vars['attr_translation_parameters'], $attrTranslationParameters);
if (!$labelFormat) {
$labelFormat = $view->parent->vars['label_format'];
}
@ -97,6 +102,8 @@ abstract class BaseType extends AbstractType
'block_prefixes' => $blockPrefixes,
'unique_block_prefix' => $uniqueBlockPrefix,
'translation_domain' => $translationDomain,
'label_translation_parameters' => $labelTranslationParameters,
'attr_translation_parameters' => $attrTranslationParameters,
// Using the block name here speeds up performance in collection
// forms, where each entry has the same full block name.
// Including the type is important too, because if rows of a
@ -118,6 +125,8 @@ abstract class BaseType extends AbstractType
'disabled' => false,
'label' => null,
'label_format' => null,
'label_translation_parameters' => [],
'attr_translation_parameters' => [],
'attr' => [],
'translation_domain' => null,
'auto_initialize' => true,

View File

@ -68,6 +68,7 @@ class FormType extends BaseType
parent::buildView($view, $form, $options);
$name = $form->getName();
$helpTranslationParameters = $options['help_translation_parameters'];
if ($view->parent) {
if ('' === $name) {
@ -78,6 +79,8 @@ class FormType extends BaseType
if (!isset($view->vars['attr']['readonly']) && isset($view->parent->vars['attr']['readonly']) && false !== $view->parent->vars['attr']['readonly']) {
$view->vars['attr']['readonly'] = true;
}
$helpTranslationParameters = array_merge($view->parent->vars['help_translation_parameters'], $helpTranslationParameters);
}
$formConfig = $form->getConfig();
@ -92,6 +95,7 @@ class FormType extends BaseType
'help' => $options['help'],
'help_attr' => $options['help_attr'],
'help_html' => $options['help_html'],
'help_translation_parameters' => $helpTranslationParameters,
'compound' => $formConfig->getCompound(),
'method' => $formConfig->getMethod(),
'action' => $formConfig->getAction(),
@ -185,6 +189,7 @@ class FormType extends BaseType
'help' => null,
'help_attr' => [],
'help_html' => false,
'help_translation_parameters' => [],
]);
$resolver->setAllowedTypes('label_attr', 'array');

View File

@ -2587,6 +2587,82 @@ abstract class AbstractLayoutTest extends FormIntegrationTestCase
[@type="color"]
[@name="name"]
[@value="#0000ff"]
'
);
}
public function testLabelWithTranslationParameters()
{
$form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\TextType');
$html = $this->renderLabel($form->createView(), 'Address is %address%', [
'label_translation_parameters' => [
'%address%' => 'Paris, rue de la Paix',
],
]);
$this->assertMatchesXpath($html,
'/label
[@for="name"]
[.="[trans]Address is Paris, rue de la Paix[/trans]"]
'
);
}
public function testHelpWithTranslationParameters()
{
$form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, [
'help' => 'for company %company%',
'help_translation_parameters' => [
'%company%' => 'ACME Ltd.',
],
]);
$html = $this->renderHelp($form->createView());
$this->assertMatchesXpath($html,
'/*
[@id="name_help"]
[.="[trans]for company ACME Ltd.[/trans]"]
'
);
}
public function testAttributesWithTranslationParameters()
{
$form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, [
'attr' => [
'title' => 'Message to %company%',
'placeholder' => 'Enter a message to %company%',
],
'attr_translation_parameters' => [
'%company%' => 'ACME Ltd.',
],
]);
$html = $this->renderWidget($form->createView());
$this->assertMatchesXpath($html,
'/input
[@title="[trans]Message to ACME Ltd.[/trans]"]
[@placeholder="[trans]Enter a message to ACME Ltd.[/trans]"]
'
);
}
public function testButtonWithTranslationParameters()
{
$form = $this->factory->createNamedBuilder('myform')
->add('mybutton', 'Symfony\Component\Form\Extension\Core\Type\ButtonType', [
'label' => 'Submit to %company%',
'label_translation_parameters' => [
'%company%' => 'ACME Ltd.',
],
])
->getForm();
$view = $form->get('mybutton')->createView();
$html = $this->renderWidget($view, ['label_format' => 'form.%name%']);
$this->assertMatchesXpath($html,
'/button
[.="[trans]Submit to ACME Ltd.[/trans]"]
'
);
}

View File

@ -119,6 +119,102 @@ abstract class BaseTypeTest extends TypeTestCase
$this->assertNull($view['child']->vars['translation_domain']);
}
public function testPassLabelTranslationParametersToView()
{
$view = $this->factory->create($this->getTestedType(), null, [
'label_translation_parameters' => ['%param%' => 'value'],
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['label_translation_parameters']);
}
public function testPassAttrTranslationParametersToView()
{
$view = $this->factory->create($this->getTestedType(), null, [
'attr_translation_parameters' => ['%param%' => 'value'],
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['attr_translation_parameters']);
}
public function testInheritLabelTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'label_translation_parameters' => ['%param%' => 'value'],
])
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['label_translation_parameters']);
}
public function testInheritAttrTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'attr_translation_parameters' => ['%param%' => 'value'],
])
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['attr_translation_parameters']);
}
public function testPreferOwnLabelTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'label_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', $this->getTestedType(), [
'label_translation_parameters' => ['%override_param%' => 'child_value'],
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['label_translation_parameters']);
}
public function testPreferOwnAttrTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, [
'attr_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', $this->getTestedType(), [
'attr_translation_parameters' => ['%override_param%' => 'child_value'],
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['attr_translation_parameters']);
}
public function testDefaultLabelTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['label_translation_parameters']);
}
public function testDefaultAttrTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['attr_translation_parameters']);
}
public function testPassLabelToView()
{
$view = $this->factory->createNamed('__test___field', $this->getTestedType(), null, ['label' => 'My label'])

View File

@ -651,4 +651,52 @@ class FormTypeTest extends BaseTypeTest
$this->assertSame(['form', 'child', '_parent_child'], $view['child']->vars['block_prefixes']);
}
public function testDefaultHelpTranslationParameters()
{
$view = $this->factory->createNamedBuilder('parent', self::TESTED_TYPE)
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals([], $view['child']->vars['help_translation_parameters']);
}
public function testPassHelpTranslationParametersToView()
{
$view = $this->factory->create($this->getTestedType(), null, [
'help_translation_parameters' => ['%param%' => 'value'],
])
->createView();
$this->assertSame(['%param%' => 'value'], $view->vars['help_translation_parameters']);
}
public function testInheritHelpTranslationParametersFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', self::TESTED_TYPE, null, [
'help_translation_parameters' => ['%param%' => 'value'],
])
->add('child', $this->getTestedType())
->getForm()
->createView();
$this->assertEquals(['%param%' => 'value'], $view['child']->vars['help_translation_parameters']);
}
public function testPreferOwnHelpTranslationParameters()
{
$view = $this->factory
->createNamedBuilder('parent', self::TESTED_TYPE, null, [
'help_translation_parameters' => ['%parent_param%' => 'parent_value', '%override_param%' => 'parent_override_value'],
])
->add('child', $this->getTestedType(), [
'help_translation_parameters' => ['%override_param%' => 'child_value'],
])
->getForm()
->createView();
$this->assertEquals(['%parent_param%' => 'parent_value', '%override_param%' => 'child_value'], $view['child']->vars['help_translation_parameters']);
}
}

View File

@ -30,6 +30,7 @@
"action",
"allow_file_upload",
"attr",
"attr_translation_parameters",
"auto_initialize",
"block_name",
"block_prefix",
@ -39,10 +40,12 @@
"help",
"help_attr",
"help_html",
"help_translation_parameters",
"inherit_data",
"label",
"label_attr",
"label_format",
"label_translation_parameters",
"mapped",
"method",
"post_max_size_message",

View File

@ -2,35 +2,38 @@
Symfony\Component\Form\Extension\Core\Type\ChoiceType (Block prefix: "choice")
==============================================================================
--------------------------- -------------------- ------------------------- -----------------------
Options Overridden options Parent options Extension options
--------------------------- -------------------- ------------------------- -----------------------
choice_attr FormType FormType FormTypeCsrfExtension
choice_label -------------------- ------------------------- -----------------------
choice_loader compound action csrf_field_name
choice_name data_class allow_file_upload csrf_message
choice_translation_domain empty_data attr csrf_protection
choice_value error_bubbling auto_initialize csrf_token_id
choices trim block_name csrf_token_manager
expanded block_prefix
group_by by_reference
multiple data
placeholder disabled
preferred_choices help
help_attr
help_html
inherit_data
label
label_attr
label_format
mapped
method
post_max_size_message
property_path
required
translation_domain
upload_max_size_message
--------------------------- -------------------- ------------------------- -----------------------
--------------------------- -------------------- ------------------------------ -----------------------
Options Overridden options Parent options Extension options
--------------------------- -------------------- ------------------------------ -----------------------
choice_attr FormType FormType FormTypeCsrfExtension
choice_label -------------------- ------------------------------ -----------------------
choice_loader compound action csrf_field_name
choice_name data_class allow_file_upload csrf_message
choice_translation_domain empty_data attr csrf_protection
choice_value error_bubbling attr_translation_parameters csrf_token_id
choices trim auto_initialize csrf_token_manager
expanded block_name
group_by block_prefix
multiple by_reference
placeholder data
preferred_choices disabled
help
help_attr
help_html
help_translation_parameters
inherit_data
label
label_attr
label_format
label_translation_parameters
mapped
method
post_max_size_message
property_path
required
translation_domain
upload_max_size_message
--------------------------- -------------------- ------------------------------ -----------------------
Parent types
------------

View File

@ -6,6 +6,7 @@
"action",
"allow_file_upload",
"attr",
"attr_translation_parameters",
"auto_initialize",
"block_name",
"block_prefix",
@ -19,10 +20,12 @@
"help",
"help_attr",
"help_html",
"help_translation_parameters",
"inherit_data",
"label",
"label_attr",
"label_format",
"label_translation_parameters",
"mapped",
"method",
"post_max_size_message",

View File

@ -2,36 +2,39 @@
Symfony\Component\Form\Extension\Core\Type\FormType (Block prefix: "form")
==========================================================================
-------------------------
Options
-------------------------
action
allow_file_upload
attr
auto_initialize
block_name
block_prefix
by_reference
compound
data
data_class
disabled
empty_data
error_bubbling
help
help_attr
help_html
inherit_data
label
label_attr
label_format
mapped
method
post_max_size_message
property_path
required
translation_domain
trim
upload_max_size_message
-------------------------
------------------------------
Options
------------------------------
action
allow_file_upload
attr
attr_translation_parameters
auto_initialize
block_name
block_prefix
by_reference
compound
data
data_class
disabled
empty_data
error_bubbling
help
help_attr
help_html
help_translation_parameters
inherit_data
label
label_attr
label_format
label_translation_parameters
mapped
method
post_max_size_message
property_path
required
translation_domain
trim
upload_max_size_message
------------------------------