Version

Documentation » Doctrine2 ORM Admin

5. Filter field definition »

« 2. Configuration

4. List field definition

These fields are used to display the information inside the list table.

4.1. Example

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' => [
                    'show' => [],
                    '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,
  • string,
  • text,
  • date,
  • time,
  • array.

Note

For the many_to_one type, a link will be added to the related Edit action.

Note

Entities with a class as identifier value (ex. uuid) will resolve to the correct supported type:

use Ramsey\Uuid\Uuid;

class Example
{
    /**
     * @var \Ramsey\Uuid\Uuid
     *
     * @ORM\Column(type="uuid")
     * @ORM\Id
     */
    private $id;

    public function __construct()
    {
        $this->id = Uuid::uuid4();
    }
}

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' => [
            'show' => [],
            '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' => [
            'show' => [],
            '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 or embedded object in a dedicated column, you can simply use the dot-separated notation:

Note

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\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;

final class UserAdmin extends AbstractAdmin
{
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->addIdentifier('firstName')
            ->addIdentifier('lastName')
            ->addIdentifier('address.street')
            ->addIdentifier('address.ZIPCode')
            ->addIdentifier('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\Form\FormMapper;
 use Sonata\AdminBundle\Datagrid\DatagridMapper;
 use Sonata\AdminBundle\Datagrid\ListMapper;
 use Sonata\AdminBundle\Show\ShowMapper;

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:

{% 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 route

Default route for a link is edit (many_to_one, one_to_one, etc.). Using this, the route can be customized as follows:

 namespace Sonata\MediaBundle\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 MediaAdmin extends AbstractAdmin
 {
     protected function configureListFields(ListMapper $listMapper)
     {
         $listMapper
             ->addIdentifier('field', null, [
                 'route' => [
                     'name' => 'show'
                 ]
             ]);
     }
}

Found a typo? Something is wrong in this documentation? Just fork and edit it!