Skip to content

Decorator limitations #180

@jrauh01

Description

@jrauh01

While rewriting the Icinga Web login form to ipl forms I've encountered a limitation for decorators.

The html in the following code snippets is simplified for better readability.

Wanted

<div class="control-group remember-me-box">
    <input value="n" name="rememberme" type="hidden">
    <input value="y" name="rememberme" type="checkbox">
    <label class="toggle-switch">
        <span class="toggle-slider"></span>
    </label>
    <div class="control-label-group">
        <label class="form-element-label">Angemeldet bleiben</label>
    </div>
</div>
Image

Expected PHP

This won't work, because the label group would wrap the label and the checkbox itself.

$this->addElement(
    'checkbox',
    'rememberme',
    [
        'label'         => $this->translate('Stay logged in'),
        'decorators'    => [
            'Checkbox' => new CheckboxDecorator(),
            'RenderElement' => new RenderElementDecorator(),
            'Label' => new LabelDecorator(),
            'LabelGroup' => [
                'name' => 'HtmlTag',
                'options' => ['tag' => 'div', 'class' => 'control-label-group']
            ],
            'ControlGroup' => [
                'name' => 'HtmlTag',
                'options' => ['tag' => 'div', 'class' => 'control-group remember-me-box']
            ],
        ]
    ]
);

This would result into this

<div class="control-group remember-me-box">
    <div class="control-label-group">
        <input value="n" name="rememberme" type="hidden">
        <input value="y" name="rememberme" type="checkbox">
        <label class="toggle-switch">
            <span class="toggle-slider"></span>
        </label>
        <label class="form-element-label">Angemeldet bleiben</label>
    </div>
</div>
Image

Problem description

Because the transformation type wrap does wrap all previous elements it is not possible to add one or multiple standalone elements before a wrapped element.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions