Fields

text

'name' => [
    'label' => 'Name',
    'type' => 'string',
    'widget' => 'text',
    'required' => 'required',
    'sort' => true,
    'show_list' => true,
    'show_add' => true,
    'show_edit' => true,
],

textarea

only in form

'type' => 'string',
'widget' => 'textarea',

password

'label' => 'Password',
'repeat_label' => 'Confirm password',
'type' => 'string',
'widget' => 'password',

also for encode password add to controller:

public function beforeSave($obj, $request, $formData) {
    if ($formData->getPassword()) {
        // password encode
        $obj->setPassword($this->passwordHasher->hashPassword($obj, $formData->getPassword()));
    }
}

radio

'type' => 'string',
'widget' => 'radio',
'choices' => [
    'Test Value'=>'val1',
    'Another text'=>'text',
],

set default value

'widget_params' => [
    'data' => 'val1'
],

boolean

'type' => 'boolean',
'widget' => 'radio',

you can set your own values

'type' => 'boolean',
'widget' => 'radio',
'yes_val' => 'ok',
'no_val' => 'not',

or show only checkbox

'type' => 'boolean',
'widget' => 'checkbox',

email

'type' => 'string',
'widget' => 'email',

file

'type' => 'string',
'widget' => 'file',

select

'type' => 'string',
'widget' => 'select',
'choices' => [
    'Test Value'=>'val1',
    'Another text'=>'text',
],
'widget_params' => [
    'placeholder' => '',
    'empty_data'  => null,
],

entity

generate select with automatically loaded choices

'type' => 'entity',
'label_field' => 'description',
'data_full' => [
    'id', 'name', 'description',
],
'class' => 'App\Entity\UserType',
'widget' => 'select',
'widget_params' => [
    'placeholder' => '',
    'empty_data'  => null,
    'choice_label' => 'description',
],

multichoice entity

list of checkboxes

'type' => 'string',
'widget' => 'multichoice',
'widget_params' => [
    'expanded' => true,
    'choices' => [
        'Test Value'=>'val1',
        'Another text'=>'text',
    ],
],

or multiline select

'expanded' => false,

selectautocomplete

load options dynamically while typing

you must specify route for loading options

for example, list of user logins:

'type' => 'entity',
'class' => 'App\Entity\User',
'widget' => 'selectautocomplete',
'label_field' => 'login',
'route' => 'get_user_autocomplete',

and add route:

get_user_autocomplete:
    path: /get_user_autocomplete
    controller: Ecode\CRUDBundle\Controller\AutocompleteController::getAutocompleteData
    options:
      expose: true
    defaults:
      res: true
      entity: App\Entity\User
      search: [login]
      title: login
      value: id

multiselectautocomplete

same as selectautocomplete, but can change many values

'widget' => 'multiselectautocomplete',

instead of route you can set optional query builder

'opt_query_builder' => function (EntityRepository $er) {
    return $er->createQueryBuilder('e')
        ->select('e.id, e.description')
        ->where("e.login IN('userlogin','test')");
},

colour

colour selector

'type' => 'string',
'widget' => 'colour',
'colours' => json_encode([['#0000ff','#ff0000']]),

date

'type' => 'date',
'widget' => 'date',

daterange

only for filter

'type' => 'date',
'widget' => 'daterange',

datetime

'type' => 'datetime',
'widget' => 'datetime',

datetimesec

'type' => 'datetimesec',
'widget' => 'datetimesec',

time

'type' => 'time',
'widget' => 'time',

subform entity

subform with dynamically add

data class is required

'subform_labels' => [
    'id' => '',
    'humanSurname' => 'Surname',
    'humanName' => 'Name',
    'humanPatronymic' => 'Patronymic',
],
'prototype_data' => new \App\Data\PassHumanData(null, '', '', '', null, null, null, false),
'type' => 'entity',
'data_full' => [
    'id', 'humanSurname', 'humanName', 'humanPatronymic',
],
'class' => 'App\Entity\PassHuman',
'widget' => 'subformadd',
'route' => 'get_human_autocomplete_select',
'filter_widget' => 'selectautocomplete',
'filter_field' => 'passCarHuman',
'entry_type' => 'App\Form\CarPassengerTypeSingleAdd',
'att_settings' => [
    'id' => [
        'label' => '',
        'type' => 'number',
        'search' => false,
        'widget' => 'hidden',
        'widget_params' => [
            'attr' => [
                'class' => 'd-none',
            ],
        ],
    ],
    'humanSurname' => [
        'label' => 'Surname',
        'type' => 'string',
        'widget' => 'text',
    ],
    'humanName' => [
        'label' => 'Name',
        'type' => 'string',
        'widget' => 'text',
    ],
    'humanPatronymic' => [
        'label' => 'Patronymic',
        'type' => 'string',
        'widget' => 'text',
    ],
],
'valueformat' => 'list',
'hide_empty_table' => true,
'add_button_title' => 'Add human',
'format_fields' => [
    'humanSurname',
    'humanName',
    'humanPatronymic',
],
'format_params' => [
    'delimiter_field' => ' ',
    'get_label' => false,
],
'show_list'=>true,

joinfield

load field from join entity

join_field - key of join entity

in array join_field_data set which fields load from join entity

'type' => 'joinfield',
'widget' => 'text',
'join_field' => 'user',
'join_field_data' => [
    ['field'=>'name'],
],