Index de l'article

Sonata

1) Créez un nouveau projet de test

Nommé ici test-sonata :

composer create-project symfony/skeleton test-sonata

2) Installez l'Admin-bundle

cd test-sonata
composer require symfony/apache-pack
composer require sonata-project/admin-bundle

Et hop une belle admin Sonata :

http://localhost/test-sonata/public/admin/dashboard

Vous pouvez modifier son title dans config / packages / sonata_admin.yaml.

3) Doctrine

composer require symfony/orm-pack
composer require symfony/maker-bundle --dev
composer require sonata-project/doctrine-orm-admin-bundle

4) La base de données

Dans .env :

DATABASE_URL=mysql://root:''@127.0.0.1:3306/test-sonata
php bin/console doctrine:database:create

5) Entité Customer

php bin/console make:entity

Créez les champs lastname, firstname et email1. String, 255 carcatères et non-null (Enter pour validé par défaut).

php bin/console make:migration
php bin/console doctrine:migrations:migrate

6) La classe de gestion de l'entité :

Dans src / admin, créez le fichier CustomerAdmin.php :

<?php

namespace App\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class CustomerAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper->add('lastname', TextType::class);
$formMapper->add('firstname', TextType::class);
$formMapper->add('email1', TextType::class);
}

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('lastname');
$datagridMapper->add('firstname');
$datagridMapper->add('email1');
}

protected function configureListFields(ListMapper $listMapper)
{
$listMapper->addIdentifier('lastname');
$listMapper->addIdentifier('firstname');
$listMapper->addIdentifier('email1');
}
}

Puis dans config / services.yaml :

     admin.customer:
class: App\Admin\CustomerAdmin
arguments: [~, App\Entity\Customer, ~]
tags:
- { name: sonata.admin, manager_type: orm, label: Customer }
public: true

Et dans config / packages / framework.yaml :

framework:
    translator: { fallbacks: ["%locale%"] }

Attention aux tabulations ! Que des espaces !

Si besoin :

composer require templating

À ce stade vous avez un CRUD sur votre entité Customer.

8) Diviser un formulaire en plusieurs onglets

Au moment d'appeler vos champs, ajouter une tab et un with avec quelques paramètres. Exemple si vous aviez ce code suivant :

$formMapper->add('city', TextType::class);
$formMapper->add('state', TextType::class);
$formMapper->add('country', TextType::class);

Il deviendra :

$formMapper->tab('General2') // the tab call is optional
->with('Addresses', [
'class' => 'col-md-5',
'box_class' => 'box box-solid box-danger',
'description' => 'Lorem ipsum',
])
->add('city', TextType::class)
->add('state', TextType::class)
->add('country', TextType::class)
->end() ->end();

XXX) [WORKING, ne fonctionne pas au 18/07/2018] Users

composer require sonata-project/user-bundle
composer require swiftmailer-bundle

Créez config / packages / fos_user.yaml :

fos_user:
db_driver: orm
firewall_name: main
user_class: App\Entity\User
from_email:
address: "Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser."
sender_name: "Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser."
composer require jms/serializer-bundle