4. List field definition¶
These fields are used to display the information inside the list table.
4.1. Example¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | namespace Sonata\NewsBundle\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
final class PostAdmin extends AbstractAdmin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title')
->add('author')
->add('enabled')
->add('tags')
->add('commentsEnabled')
// add custom action links
->add('_action', 'actions', [
'actions' => [
'view' => [],
'edit' => [],
]
]);
}
}
|
4.2. Types available¶
The most important option for each field is the type
: The available
types include:
- boolean
- datetime
- decimal
- identifier
- integer
- many_to_one : a link will be added to the related edit action
- string
- text
- date
- time
- array
If no type is set, the Admin
class will use the type defined in the doctrine
mapping definition.
4.3. List Actions¶
You can set actions for the list items by adding an ‘_action’ field in configureListFields
:
$listMapper
->add('_action', 'actions', [
'actions' => [
'view' => [],
'edit' => [],
]
]);
Edit and delete actions are enabled in the default configuration. You can add
your own! Default template file is: @SonataAdmin/CRUD/list__action_[ACTION_NAME].html.twig
You can specify your own by setting up the ‘template’ option like so:
$listMapper
->add('_action', 'actions', [
'actions' => [
'view' => [],
'edit' => [],
'delete' => ['template' => '@My/MyController/my_partial.html.twig'],
]
]);
4.4. Advance Usage¶
4.4.1. Displaying sub entity properties¶
If you need to display only one field from a sub entity in a dedicated column, you can use the dot-separated notation (note that this only makes sense when the prefix path is made of entities, not collections):
namespace App\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
final class UserAdmin extends AbstractAdmin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('firstName')
->add('lastName')
->add('address.street')
->add('address.ZIPCode')
->add('address.town')
;
}
}
4.4.2. Custom template¶
If you need a specific layout for a row cell, you can define a custom template:
namespace Sonata\MediaBundle\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
final class MediaAdmin extends AbstractAdmin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('image', 'string', [
'template' => '@SonataMedia/MediaAdmin/list_image.html.twig',
])
->add('custom', 'string', [
'template' => '@SonataMedia/MediaAdmin/list_custom.html.twig',
])
;
}
}
The related template :
1 2 3 4 5 6 7 8 | {% extends '@SonataAdmin/CRUD/base_list_field.html.twig' %}
{% block field%}
<div>
<strong>{{ object.name }}</strong> <br/>
{{ object.providername}} : {{ object.width }}x{{ object.height }} <br/>
</div>
{% endblock %}
|
4.4.3. Custom link¶
Assuming you have a custom controller for an admin already defined and an action you want link to on the list
other than show
or edit
, you have to first define the desired route (for example download
) in the admin class:
protected function configureRoutes(RouteCollection $collection)
{
$collection
->add('download', $this->getRouterIdParameter() . '/download');
}
To get the route’s full name you can examine the router by running bin/console debug:router
.
The following example describes a link to the download
action. The link will display the filename
property and have the object’s id
as url parameter:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('filename', 'url', [
'route' => [
'name' => 'admin_acme_demo_foo_download',
'identifier_parameter_name' => 'id'
]
]);
}