Qui andiamo développer l’insieme delle manipolazioni per costruire un'interfaccia many to many tramite Sonata.
Prenderemo come esempio una gestione di zone con un collegamento tramite déappartamenti. Ogni zona è quindi costituitaé d’un collegamento multiplo con la tabella déreparto.
Sotto MysqlWorkbench, questo appare così:
Per généPer le entità, utilizziamo il comando seguente:
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
Poi, noi créMettiamoli e li mettiamo nelle nostre entità tramite il comando:
php bin/console make:entity --regenerate App
Non ci resta che’a généCreare il nostro CRUD Sonata senza dimenticare di svuotare la cache.
php bin/console make:sonata:admin App/Entity/ZxZone
php bin/console cache:clear
La nostra interfaccia sarà créé e anche il servizio. Ci servirà tutto di meêfarmene alcune manipolazioni.
1 – Eliminare l’ID del nostro modulo di création d’registrazione e aggiungere il nostro campo diépartimento
//ajouter le use suivant
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
//supprimez l'id, et ajouter la liaison département
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
//->add('id')
->add('label')
->add('code')
->add('departement', EntityType::class, [
'class' => 'App\Entity\Departement',
'choice_label' => 'label',
'label' => 'Départements',
'required' => false,
'by_reference' => false,
'multiple' => true,
'expanded' => false,
]);
}
Nel définitura di département chiediamo esplicitamente di’visualizzare il campo etichetta nella nostra lista, tramite il parametroètre « etichetta_scelta ».
Questo ci permette di’mostrare un'etichetta più simpatica che solo l’id. Ma per questo, bisogna aggiungere le mémetodi seguenti in l’entità dipartimento.
//Permet d'afficher un nom plus sympa dans les messages du CRUD
public function __toString(): ?string
{
return $this->id." : ".$this->nomClairRiche;
}
//Permet d'afficher un label dans notre liste de configuration
public function getLabel(): ?string
{
return $this->id." : ".$this->nomClairRiche;
}
Adattare l’esempio alla versione installata
Gli esempi Symfony e Sonata rimangono legati alle versioni indicate nell’articolo. Symfony 4.x e Symfony 6.2 non sono più supportati: per un progetto attuale, utilizzate un ramo mantenuto e la documentazione corrispondente esattamente alle vostre dipendenze.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Prima di riprendere il codice, controllate le firme, i servizi, le rotte e i template interessati. Aggiungete poi un test funzionale che copra le autorizzazioni, il codice HTTP e il risultato visibile.
Riferimento : versioni di Symfony supportate.