Note
This document is a stub representing a new work in progress. If you’re reading this you can help contribute, no matter what your experience level with Sonata is. Check out the issues on Github for more information about how to get involved.
This document will cover the Create and Edit actions. It will cover configuration of the fields and forms available in these views and any other relevant settings.
SonataAdmin Options that may affect the create or edit view:
sonata_admin:
options:
html5_validate: true # enable or disable html5 form validation
confirm_exit: true # enable or disable a confirmation before navigating away
use_select2: true # enable or disable usage of the Select2 jQuery library
use_icheck: true # enable or disable usage of the iCheck library
use_bootlint: false # enable or disable usage of Bootlint
use_stickyforms: true # enable or disable the floating buttons
form_type: standard # can also be 'horizontal'
templates:
edit: '@SonataAdmin/CRUD/edit.html.twig'
tab_menu_template: '@SonataAdmin/Core/tab_menu_template.html.twig'
For more information about optional libraries:
Note
TODO: * options available when adding fields, inc custom templates
You can disable creating or editing entities by removing the corresponding routes in your Admin. For more detailed information about routes, see Routing.
<?php
// src/AppBundle/Admin/PersonAdmin.php
class PersonAdmin extends AbstractAdmin
{
// ...
protected function configureRoutes(RouteCollection $collection): void
{
/* Removing the edit route will disable editing entities. It will also
* use the 'show' view as default link on the identifier columns in the list view.
*/
$collection->remove('edit');
/* Removing the create route will disable creating new entities. It will also
* remove the 'Add new' button in the list view.
*/
$collection->remove('create');
}
// ...
}
Within the configureFormFields method you can define which fields should be shown when editing or creating entities. Each field has to be added to a specific form group. And form groups can optionally be added to a tab. See FormGroup options for additional information about configuring form groups.
Using the FormMapper add method, you can add form fields. The add method has 4 parameters:
name
: The name of your entity.type
: The type of field to show; by defaults this is null
to let
Sonata decide which type to use. See Field Types
for more information on available types.options
: The form options to be used for the field. These may differ
per type. See Field Types for more information on
available options.fieldDescriptionOptions
: The field description options. Options here
are passed through to the field template. See Form Types, FieldDescription
options for more information.Note
The property entered in name
should be available in your Entity
through getters/setters or public access.
<?php
// src/AppBundle/Admin/PersonAdmin.php
class PersonAdmin extends AbstractAdmin
{
// ...
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->tab('General') // The tab call is optional
->with('Addresses')
->add('title') // Add a field and let Sonata decide which type to use
->add('streetname', TextType::class) // Add a textfield
->add('housenumber', NumberType::class) // Add a number field
->add('housenumberAddition', TextType::class, ['required' => false]) // Add a non-required text field
->end() // End form group
->end() // End tab
;
}
// ...
}
When adding a form group to your edit/create form, you may specify some options for the group itself.
collapsed
: unused at the momentclass
: The class for your form group in the admin; by default, the
value is set to col-md-12
.fields
: The fields in your form group (you should NOT override this
unless you know what you’re doing).box_class
: The class for your form group box in the admin; by default,
the value is set to box box-primary
.description
: A text shown at the top of the form group.translation_domain
: The translation domain for the form group title
(the Admin translation domain is used by default).To specify options, do as follows:
<?php
// src/AppBundle/Admin/PersonAdmin.php
class PersonAdmin extends AbstractAdmin
{
// ...
public function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->tab('General') // the tab call is optional
->with('Addresses', [
'class' => 'col-md-8',
'box_class' => 'box box-solid box-danger',
'description' => 'Lorem ipsum',
// ...
])
->add('title')
// ...
->end()
->end()
;
}
// ...
}
Here is an example of what you can do with customizing the box_class on a group:
Note
TODO: * how to embed one Admin in another (1:1, 1:M, M:M) * how to access the right object(s) from the embedded Admin’s code
Note
TODO: * how to create settings/fields that appear on just one of the create/edit views * and any controller changes needed to manage them
Found a typo? Something is wrong in this documentation? Just fork and edit it!