function LayoutBuilder::renderLayoutBuilderAfterForm

Render API #pre_render callback for form containing layout builder element.

Because the layout builder element can contain components with forms, it needs to exist outside forms within the DOM, to avoid nested form tags. The layout builder element is rendered to markup here and saved, and later the saved markup will be appended after the form markup.

Parameters

array $form: The rendered form.

Return value

array

See also

::addRenderedLayoutBuilder()

File

core/modules/layout_builder/src/Element/LayoutBuilder.php, line 129

Class

LayoutBuilder
Defines a render element for building the Layout Builder UI.

Namespace

Drupal\layout_builder\Element

Code

public static function renderLayoutBuilderAfterForm(array $form) : array {
    if (isset($form['#layout_builder_element_keys'])) {
        $layout_builder_element =& NestedArray::getValue($form, $form['#layout_builder_element_keys']);
        // Save the rendered layout builder HTML to a non-rendering child key.
        // Since this method is a pre_render callback, it is assumed that it is
        // called while rendering with an active render context, so that the
        // cache metadata and attachments bubble correctly.
        $form['#layout_builder_markup'] = \Drupal::service('renderer')->render($layout_builder_element);
        // Remove the layout builder child element within form array.
        $layout_builder_element = [];
    }
    return $form;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.