diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_horizontal_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_horizontal_layout.html.twig
index 4dc3e9c896..49cd804398 100644
--- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_horizontal_layout.html.twig
+++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_horizontal_layout.html.twig
@@ -64,6 +64,7 @@ col-sm-10
{#--#}
{{- form_widget(form) -}}
+ {{- form_help(form) -}}
{{- form_errors(form) -}}
{#--#}
diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig
index f0cf0ad818..44492cebe7 100644
--- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig
+++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig
@@ -148,6 +148,7 @@
{% block checkbox_row -%}
{{- form_widget(form) -}}
+ {{- form_help(form) -}}
{{- form_errors(form) -}}
{%- endblock checkbox_row %}
@@ -155,6 +156,7 @@
{% block radio_row -%}
{{- form_widget(form) -}}
+ {{- form_help(form) -}}
{{- form_errors(form) -}}
{%- endblock radio_row %}
diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/foundation_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/foundation_5_layout.html.twig
index 83c5e30d80..8ab44ccc77 100644
--- a/src/Symfony/Bridge/Twig/Resources/views/Form/foundation_5_layout.html.twig
+++ b/src/Symfony/Bridge/Twig/Resources/views/Form/foundation_5_layout.html.twig
@@ -311,6 +311,7 @@
{{ form_widget(form) }}
+ {{- form_help(form) -}}
{{ form_errors(form) }}
@@ -320,6 +321,7 @@
{{ form_widget(form) }}
+ {{- form_help(form) -}}
{{ form_errors(form) }}
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3HorizontalLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3HorizontalLayoutTest.php
index 9131216182..69064a003d 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3HorizontalLayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3HorizontalLayoutTest.php
@@ -163,4 +163,23 @@ abstract class AbstractBootstrap3HorizontalLayoutTest extends AbstractBootstrap3
$this->assertMatchesXpath($html, '/div[@class="form-group"]/div[@class="col-sm-2" or @class="col-sm-10"]', 2);
}
+
+ public function testCheckboxRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\CheckboxType');
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+'/div
+ [@class="form-group"]
+ [
+ ./div[@class="col-sm-2" or @class="col-sm-10"]
+ /following-sibling::div[@class="col-sm-2" or @class="col-sm-10"]
+ [
+ ./span[text() = "[trans]really helpful text[/trans]"]
+ ]
+ ]
+'
+ );
+ }
}
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3LayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3LayoutTest.php
index 16f8f818f3..be7a11e797 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3LayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap3LayoutTest.php
@@ -333,6 +333,21 @@ abstract class AbstractBootstrap3LayoutTest extends AbstractLayoutTest
);
}
+ public function testCheckboxRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\CheckboxType');
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+'/div
+ [@class="form-group"]
+ [
+ ./span[text() = "[trans]really helpful text[/trans]"]
+ ]
+'
+ );
+ }
+
public function testSingleChoice()
{
$form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\ChoiceType', '&a', [
@@ -2277,6 +2292,21 @@ abstract class AbstractBootstrap3LayoutTest extends AbstractLayoutTest
);
}
+ public function testRadioRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\RadioType', false);
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+'/div
+ [@class="form-group"]
+ [
+ ./span[text() = "[trans]really helpful text[/trans]"]
+ ]
+'
+ );
+ }
+
public function testRange()
{
$form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\RangeType', 42, ['attr' => ['min' => 5]]);
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4HorizontalLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4HorizontalLayoutTest.php
index e9416b0221..e20f4818b2 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4HorizontalLayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4HorizontalLayoutTest.php
@@ -231,6 +231,25 @@ abstract class AbstractBootstrap4HorizontalLayoutTest extends AbstractBootstrap4
./small[text() = "[trans]really helpful text[/trans]"]
]
]
+'
+ );
+ }
+
+ public function testRadioRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\RadioType', false);
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+'/div
+ [@class="form-group row"]
+ [
+ ./div[@class="col-sm-2" or @class="col-sm-10"]
+ /following-sibling::div[@class="col-sm-2" or @class="col-sm-10"]
+ [
+ ./small[text() = "[trans]really helpful text[/trans]"]
+ ]
+ ]
'
);
}
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4LayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4LayoutTest.php
index 89fbacf2fc..2643274d47 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4LayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/AbstractBootstrap4LayoutTest.php
@@ -422,6 +422,21 @@ abstract class AbstractBootstrap4LayoutTest extends AbstractBootstrap3LayoutTest
);
}
+ public function testCheckboxRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\CheckboxType');
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+ '/div
+ [@class="form-group"]
+ [
+ ./small[text() = "[trans]really helpful text[/trans]"]
+ ]
+'
+ );
+ }
+
public function testSingleChoiceExpanded()
{
$form = $this->factory->createNamed('name', ChoiceType::class, '&a', [
@@ -1027,6 +1042,21 @@ abstract class AbstractBootstrap4LayoutTest extends AbstractBootstrap3LayoutTest
);
}
+ public function testRadioRowWithHelp()
+ {
+ $form = $this->factory->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\RadioType', false);
+ $html = $this->renderRow($form->createView(), ['label' => 'foo', 'help' => 'really helpful text']);
+
+ $this->assertMatchesXpath($html,
+'/div
+ [@class="form-group"]
+ [
+ ./small[text() = "[trans]really helpful text[/trans]"]
+ ]
+'
+ );
+ }
+
public function testButtonAttributeNameRepeatedIfTrue()
{
$form = $this->factory->createNamed('button', ButtonType::class, null, [