Page 9 sur 14
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