You are reading the documentation for the 2.x version. Switch to the current version 3.x.
Collection
Collection is an array of element. An element can be added, removed, etc.
Use class Berlioz\Form\Collection to construct a collection of inputs.
Options
| Name | Type | Default value | Description |
|---|---|---|---|
| prototype | ElementInterface |
none | The element template that will be cloned to create collection elements |
| editable | boolean | true | If collection is editable (can add/remove element) |
| min_elements | int | none | The minimum number of elements in collection |
| max_elements | int | none | The maximum number of elements in collection |
| type | string | “collection” | The type name of collection (to personalize template) |
Creation of sub objects
Use special option “data_type” in the prototype options to create the specified class object. Or use a closure in this option to create a dynamic object.
JavaScript interaction
A library is available to do interaction with JavaScript and user: https://github.com/BerliozFramework/Form.js
Example
Creation of a collection of addresses.
use Berlioz\Form\Collection;
use Berlioz\Form\Form;
use Berlioz\Form\Group;
use Berlioz\Form\Transformer\JsonTransformer;
use Berlioz\Form\Type\Text;
$address = new Group();
$address
->add(
'address',
Text::class,
[
'label' => 'Address',
'attributes' => ['maxlength' => 128],
]
)
->add(
'address_next',
Text::class,
[
'label' => 'Address (next)',
'required' => false,
'attributes' => ['maxlength' => 128],
]
)
->add(
'zip',
Text::class,
[
'label' => 'Zip code',
'attributes' => ['maxlength' => 5],
]
)
->add(
'city',
Text::class,
[
'label' => 'City',
'attributes' => ['maxlength' => 128],
]
);
$form = new Form('form');
$form->add('addresses', Collection::class, ['prototype' => $address]);
Result of form will be:
[
"addresses" => [
[
"address" => "Address value",
"address_next" => "Address next value",
"zip" => "01234",
"city" => "City value"
],
[
"address" => "Address 2 value",
"address_next" => "Address 2 next value",
"zip" => "12345",
"city" => "City 2 value"
]
]
]