Skip to content

Commit 2700fce

Browse files
Jakub Jeřábekf3l1x
authored andcommitted
fix: properly show bootstrap 5 error messages
1 parent 9cf5170 commit 2700fce

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

src/Rendering/Bootstrap5HorizontalRenderer.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Bootstrap5HorizontalRenderer extends AbstractBootstrapHorizontalRenderer
3838
'.odd' => null,
3939
'description' => 'span class="form-text"',
4040
'requiredsuffix' => '',
41-
'errorcontainer' => 'span class="form-text"',
41+
'errorcontainer' => 'div class="invalid-feedback"',
4242
'erroritem' => '',
4343
'.required' => 'required',
4444
'.text' => 'text',
@@ -71,13 +71,25 @@ public function render(Form $form, $mode = null): string
7171
$onlyButton = Helpers::onlyOneButton($form);
7272

7373
foreach ($form->getControls() as $control) {
74+
if ($control instanceof Controls\BaseControl && $control->hasErrors()) {
75+
$control->getControlPrototype()->addClass('is-invalid');
76+
}
77+
7478
if ($control instanceof Controls\BaseControl
7579
&& !($control instanceof Controls\Checkbox)
7680
&& !($control instanceof Controls\CheckboxList)
7781
&& !($control instanceof Controls\RadioList)) {
7882
$control->getLabelPrototype()->addClass($this->replacePlaceholders('col-form-label col-%colsLabel%'));
7983
}
8084

85+
// the .invalid-feedback expects .is-invalid on the same level to be displayed
86+
if ($control->hasErrors()
87+
&& ($control instanceof Controls\Checkbox
88+
|| $control instanceof Controls\CheckboxList
89+
|| $control instanceof Controls\RadioList)) {
90+
$control->getSeparatorPrototype()->setName('div')->addClass('is-invalid');
91+
}
92+
8193
switch (true) {
8294
case $control instanceof Controls\Button:
8395
if (!Helpers::htmlClassContains($control->getControlPrototype(), 'btn')) {

src/Rendering/Bootstrap5InlineRenderer.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Bootstrap5InlineRenderer extends DefaultFormRenderer
3636
'.odd' => null,
3737
'description' => 'span class="form-text"',
3838
'requiredsuffix' => '',
39-
'errorcontainer' => 'span class="form-text"',
39+
'errorcontainer' => 'div class="invalid-feedback"',
4040
'erroritem' => '',
4141
'.required' => 'required',
4242
'.text' => 'text',
@@ -68,6 +68,10 @@ public function render(Form $form, $mode = null): string
6868
$onlyButton = Helpers::onlyOneButton($form);
6969

7070
foreach ($form->getControls() as $control) {
71+
if ($control instanceof Controls\BaseControl && $control->hasErrors()) {
72+
$control->getControlPrototype()->addClass('is-invalid');
73+
}
74+
7175
if ($control instanceof Controls\BaseControl) {
7276
$control->getLabelPrototype()->addClass('col-form-label');
7377
}
@@ -89,6 +93,10 @@ public function render(Form $form, $mode = null): string
8993
case $control instanceof Controls\Checkbox:
9094
case $control instanceof Controls\CheckboxList:
9195
case $control instanceof Controls\RadioList:
96+
// the .invalid-feedback expects .is-invalid on the same level to be displayed
97+
if ($control->hasErrors()) {
98+
$control->getSeparatorPrototype()->setName('div')->addClass('is-invalid');
99+
}
92100
$control->getSeparatorPrototype()->setName('div')->addClass('form-check form-check-inline');
93101
$control->getControlPrototype()->addClass('form-check-input');
94102
$control->getLabelPrototype()->addClass('form-check-label');

src/Rendering/Bootstrap5VerticalRenderer.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Bootstrap5VerticalRenderer extends DefaultFormRenderer
3737
'.odd' => null,
3838
'description' => 'span class="form-text"',
3939
'requiredsuffix' => '',
40-
'errorcontainer' => 'span class="form-text"',
40+
'errorcontainer' => 'div class="invalid-feedback"',
4141
'erroritem' => '',
4242
'.required' => 'required',
4343
'.text' => 'text',
@@ -69,6 +69,10 @@ public function render(Form $form, $mode = null): string
6969
$onlyButton = Helpers::onlyOneButton($form);
7070

7171
foreach ($form->getControls() as $control) {
72+
if ($control instanceof Controls\BaseControl && $control->hasErrors()) {
73+
$control->getControlPrototype()->addClass('is-invalid');
74+
}
75+
7276
if ($control instanceof Controls\BaseControl && !$control instanceof Controls\Checkbox) {
7377
$control->getLabelPrototype()->addClass('col-form-label');
7478
}
@@ -90,10 +94,14 @@ public function render(Form $form, $mode = null): string
9094
case $control instanceof Controls\Checkbox:
9195
case $control instanceof Controls\CheckboxList:
9296
case $control instanceof Controls\RadioList:
97+
// the .invalid-feedback expects .is-invalid on the same level to be displayed
98+
if ($control->hasErrors()) {
99+
$control->getSeparatorPrototype()->setName('div')->addClass('is-invalid');
100+
}
93101
$control->getSeparatorPrototype()->setName('div')->addClass('form-check');
94102
$control->getControlPrototype()->addClass('form-check-input');
95103
$control->getLabelPrototype()->addClass('form-check-label');
96-
break;
104+
break;
97105
}
98106
}
99107

0 commit comments

Comments
 (0)