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 %}