diff --git a/src/Symfony/Bridge/Twig/CHANGELOG.md b/src/Symfony/Bridge/Twig/CHANGELOG.md index d6d929cb50ed6..fb83ec2aa7084 100644 --- a/src/Symfony/Bridge/Twig/CHANGELOG.md +++ b/src/Symfony/Bridge/Twig/CHANGELOG.md @@ -1,6 +1,10 @@ CHANGELOG ========= +7.4 +--- +* Add `aria-invalid` and `aria-describedby` attributes to form fields when validation errors are present + 7.3 --- 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 fc7289c8c3932..04ab90defadba 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 @@ -22,11 +22,7 @@ col-sm-2 {# Rows #} -{% block form_row -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} +{% block form_row_render -%} {{- form_label(form) -}}
@@ -35,7 +31,7 @@ col-sm-2 {{- form_errors(form) -}}
{##} -{%- endblock form_row %} +{%- endblock form_row_render -%} {% block submit_row -%} {#--#} 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 bfb9d89aaeecc..f6b86179e1de6 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 @@ -127,18 +127,14 @@ {# Rows #} -{% block form_row -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} +{% block form_row_render -%} {{- form_label(form) }} {# -#} {{ form_widget(form, widget_attr) }} {# -#} {{- form_help(form) -}} {{ form_errors(form) }} {# -#} {# -#} -{%- endblock form_row %} +{%- endblock form_row_render -%} {% block button_row -%} @@ -187,7 +183,7 @@ {% block form_errors -%} {% if errors|length > 0 -%} {% if form is not rootform %}{% else %}
{% endif %} -
    +
      {%- for error in errors -%}
    • {{ error.message }}
    • {%- endfor -%} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_horizontal_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_horizontal_layout.html.twig index 516d79938d6ac..e703ee19340dc 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_horizontal_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_horizontal_layout.html.twig @@ -24,10 +24,14 @@ col-sm-2 {%- if expanded is defined and expanded -%} {{ block('fieldset_form_row') }} {%- else -%} - {%- set widget_attr = {} -%} + {%- set attr = {} -%} {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- set attr = attr|merge({'aria-describedby': id ~"_help"}) -%} + {%- endif -%} + {%- if errors|length > 0 -%} + {%- set attr = attr|merge({'aria-invalid': 'true'}) -%} {%- endif -%} + {%- set widget_attr = {attr: attr} -%} {{- form_label(form) -}}
      diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig index 9681d4f81c0fc..6191fef7d4e88 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig @@ -282,10 +282,14 @@ {%- if compound is defined and compound -%} {%- set element = 'fieldset' -%} {%- endif -%} - {%- set widget_attr = {} -%} + {%- set attr = {} -%} {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- set attr = attr|merge({'aria-describedby': id ~"_help"}) -%} {%- endif -%} + {%- if errors|length > 0 -%} + {%- set attr = attr|merge({'aria-invalid': 'true'}) -%} + {%- endif -%} + {%- set widget_attr = {attr: attr} -%} <{{ element|default('div') }}{% with {attr: row_attr|merge({class: (row_attr.class|default('') ~ ' form-group')|trim})} %}{{ block('attributes') }}{% endwith %}> {{- form_label(form) -}} {{- form_widget(form, widget_attr) -}} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_horizontal_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_horizontal_layout.html.twig index 1d08cc5eb0e8a..2086c683ed2f0 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_horizontal_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_horizontal_layout.html.twig @@ -23,14 +23,10 @@ {# Rows #} -{% block form_row -%} +{% block form_row_render -%} {%- if expanded is defined and expanded -%} {{ block('fieldset_form_row') }} {%- else -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} {%- set row_class = row_class|default(row_attr.class|default('mb-3')) -%} {%- set is_form_floating = is_form_floating|default('form-floating' in row_class) -%} {%- set is_input_group = is_input_group|default('input-group' in row_class) -%} @@ -68,7 +64,7 @@ {%- endif -%} {##}
      {%- endif -%} -{%- endblock form_row %} +{%- endblock form_row_render %} {% block fieldset_form_row -%} {%- set widget_attr = {} -%} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_layout.html.twig index d79c0af335779..5e5abc03c1549 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_5_layout.html.twig @@ -320,14 +320,10 @@ {# Rows #} -{%- block form_row -%} +{%- block form_row_render -%} {%- if compound is defined and compound -%} {%- set element = 'fieldset' -%} {%- endif -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} {%- set row_class = row_class|default(row_attr.class|default('mb-3')|trim) -%} <{{ element|default('div') }}{% with {attr: row_attr|merge({class: row_class})} %}{{ block('attributes') }}{% endwith %}> {%- if 'form-floating' in row_class -%} @@ -340,7 +336,7 @@ {{- form_help(form) -}} {{- form_errors(form) -}} -{%- endblock form_row %} +{%- endblock form_row_render %} {%- block button_row -%} @@ -352,9 +348,11 @@ {%- block form_errors -%} {%- if errors|length > 0 -%} +
      {%- for error in errors -%}
      {{ error.message }}
      {%- endfor -%} +
      {%- endif %} {%- endblock form_errors %} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig index cbc18f6692503..87b8b5f9e4d9e 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig @@ -366,17 +366,32 @@ {%- endblock repeated_row -%} {%- block form_row -%} - {%- set widget_attr = {} -%} + {%- set attr = {} -%} + {%- set aria_describedby = [] -%} {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- set aria_describedby = aria_describedby|merge([id ~ "_help"]) -%} {%- endif -%} + {%- if errors|length > 0 -%} + {%- set aria_describedby = aria_describedby|merge([id ~ "_errors"]) -%} + {%- endif -%} + {%- if aria_describedby|length > 0 -%} + {%- set attr = attr|merge({'aria-describedby': aria_describedby|join(' ')}) -%} + {%- endif -%} + {%- if errors|length > 0 -%} + {%- set attr = attr|merge({'aria-invalid': 'true'}) -%} + {%- endif -%} + {%- set widget_attr = {attr: attr} -%} + {{- block('form_row_render') -}} +{%- endblock form_row -%} + +{%- block form_row_render -%} {{- form_label(form) -}} {{- form_errors(form) -}} {{- form_widget(form, widget_attr) -}} {{- form_help(form) -}}
-{%- endblock form_row -%} +{%- endblock form_row_render -%} {%- block button_row -%} @@ -419,7 +434,7 @@ {%- block form_errors -%} {%- if errors|length > 0 -%} -
    +
      {%- for error in errors -%}
    • {{ error.message }}
    • {%- endfor -%} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig index f4f32f1b3ee18..108658bc2ccda 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig @@ -1,10 +1,6 @@ {% use "form_div_layout.html.twig" %} -{%- block form_row -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} +{%- block form_row_render -%} {{- form_label(form) -}} @@ -15,7 +11,7 @@ {{- form_help(form) -}} -{%- endblock form_row -%} +{%- endblock form_row_render -%} {%- block button_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 d6f45e0e21833..54b471db161bd 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 @@ -281,11 +281,7 @@ {# Rows #} -{% block form_row -%} - {%- set widget_attr = {} -%} - {%- if help -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} +{% block form_row_render -%}
      {{- form_label(form) -}} @@ -294,7 +290,7 @@ {{- form_errors(form) -}}
      -{%- endblock form_row %} +{%- endblock form_row_render %} {% block choice_row -%} {% set force_error = true %} @@ -340,7 +336,7 @@ {% block form_errors -%} {% if errors|length > 0 -%} - {% if form is not rootform %}{% else %}
      {% endif %} + {% if form is not rootform %}{% else %}
      {% endif %} {%- for error in errors -%} {{ error.message }} {% if not loop.last %}, {% endif %} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig index 0a7038cb09f70..e3faedb472032 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig @@ -22,7 +22,7 @@ {%- block form_errors -%} {%- if errors|length > 0 -%} -
        +
          {%- for error in errors -%}
        • {{ error.message }}
        • {%- endfor -%} pFad - Phonifier reborn

          Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

          Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


          Alternative Proxies:

          Alternative Proxy

          pFad Proxy

          pFad v3 Proxy

          pFad v4 Proxy