# Dijit-Specific Form Decorators

Most form elements can use the DijitElement decorator, which will grab the dijit parameters from the elements, and pass these and other metadata to the view helper specified by the element. For decorating forms, sub forms, and display groups, however, there are a set of decorators corresponding to the various layout dijits.

All dijit decorators look for the dijitParams property of the given element being decorated, and push them as the `$params` array to the dijit view helper being used; these are then separated from any other properties so that no duplication of information occurs.

## DijitElement Decorator

Just like the ViewHelper decorator, DijitElement expects a helper property in the element which it will then use as the view helper when rendering. Dijit parameters will typically be pulled directly from the element, but may also be passed in as options via the dijitParams key (the value of that key should be an associative array of options).

It is important that each element have a unique ID (as fetched from the element's `getId()` method). If duplicates are detected within the `dojo()` view helper, the decorator will trigger a notice, but then create a unique ID by appending the return of `uniqid()` to the identifier.

Standard usage is to simply associate this decorator as the first in your decorator chain, with no additional options.

### DijitElement Decorator Usage

    $element->setDecorators(array(
        'DijitElement',
        'Errors',
        'Label',
        'ContentPane',
    ));

## DijitForm Decorator

The DijitForm decorator is very similar to the Form decorator; in fact, it can be used basically interchangeably with it, as it utilizes the same view helper name ('form').

Since `dijit.form.Form` does not require any dijit parameters for configuration, the main difference is that the dijit form view helper require that a DOM ID is passed to ensure that programmatic dijit creation can work. The decorator ensures this, by passing the form name as the identifier.

## DijitContainer-based Decorators

The `DijitContainer` decorator is actually an abstract class from which a variety of other decorators derive. It offers the same functionality of DijitElement, with the addition of title support. Many layout dijits require or can utilize a title; DijitContainer will utilize the element's legend property, if available, and can also utilize either the 'legend' or 'title' decorator option, if passed. The title will be translated if a translation adapter with a corresponding translation is present.

The following is a list of decorators that inherit from `DijitContainer`:

- AccordionContainer

- AccordionPane

- BorderContainer

- ContentPane

- SplitContainer

- StackContainer

- TabContainer

### DijitContainer Decorator Usage

    // Use a TabContainer for your form:
    $form->setDecorators(array(
        'FormElements',
        array('TabContainer', array(
            'id'          => 'tabContainer',
            'style'       => 'width: 600px; height: 500px;',
            'dijitParams' => array(
                'tabPosition' => 'top'
            ),
        )),
        'DijitForm',
    ));

    // Use a ContentPane in your sub form (which can be used with all but
    // AccordionContainer):
    $subForm->setDecorators(array(
        'FormElements',
        array('HtmlTag', array('tag' => 'dl')),
        'ContentPane',
    ));