Feature: #84713 - Access single values in form templates

See forge#84713

Description

It is now possible to access single form values in templates of the "form" extension. For this a new RenderFormValueViewHelper has been added which complements the existing RenderAllFormValuesViewHelper.

The RenderFormValueViewHelper accepts a single form element and renders it exactly like the RenderAllFormValuesViewHelper used to do within its internal traversal of renderable elements:

To make it possible to access single form elements, a new method FormDefinition::getElements() has been added. This method returns an array containing all elements in the form with their identifiers as keys.

Viewhelper usage in mail templates:

<p>The following message was just sent by <b><formvh:renderFormValue renderable="{form.formDefinition.elements.name}" as="formValue">{formValue.processedValue}</formvh:renderFormValue><b>:</p>

<blockquote>
   <formvh:renderFormValue renderable="{form.formDefinition.elements.message}" as="formValue">
      {formValue.processedValue}
   </formvh:renderFormValue>
</blockquote>

See which elements are accessible in mail templates:

<f:debug>{form.formDefinition.elements}</f:debug>

Viewhelper usage in the SummaryPage partial:

<p>The following message was just sent by <b><formvh:renderFormValue renderable="{page.rootForm.elements.name}" as="formValue">{formValue.processedValue}</formvh:renderFormValue><b>:</p>

<blockquote>
   <formvh:renderFormValue renderable="{page.rootForm.elements.message}" as="formValue">
      {formValue.processedValue}
   </formvh:renderFormValue>
</blockquote>

See which elements are accessible in the SummaryPage partial:

<f:debug>{page.rootForm.elements}</f:debug>

Attention

The form elements are accessed differently depending on the kind of template. In mail templates {form.formDefinition.elements} is used, in the SummaryPage partial {page.rootForm.elements} is used.

Impact

Form values can now be placed freely in Fluid templates of the "form" extension instead of being bound to traverse all form values and skip rendering.