Hablemos de su proyecto
PHP symfony Sonata

Symfony 4 / Sonata : crear una administración ManyToMany

Desarrollaremos aquí todas las manipulaciones para construir una interfaz de muchos a muchos a través de Sonata.Tomaremos como ejemplo una gestión de zonas con una conexión por departamentos. Cada zona está así constituida por múltiples conexiones con la t...

Symfony 4 / Sonata : crear una administración ManyToMany

Desarrollaremos aquí todas las manipulaciones para construir una interfaz de muchos a muchos a través de Sonata.
Tomaremos como ejemplo una gestión de zonas con una conexión por departamentos. Cada zona está así constituida por múltiples conexiones con la tabla de departamentos.

En MysqlWorkbench, se ve así:

Sélection_123

Para generar las entidades, utilizamos el siguiente comando:

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
Sélection_124

A continuación, creamos los setters y getters en nuestras entidades utilizando el comando:

php bin/console make:entity --regenerate App
Sélection_125-1

Ahora solo queda generar nuestro CRUD de Sonata sin olvidar de limpiar la caché.

php bin/console make:sonata:admin App/Entity/ZxZone
php bin/console cache:clear
Sélection_126

Nuestra interfaz será creada y el servicio también. Todavía tendremos que realizar algunas manipulaciones.

1 - Quitar el ID de nuestro formulario de creación de registros y agregar nuestro campo de departamento

//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,
            ]);
    }

En la definición del departamento pedimos explícitamente mostrar el campo de etiqueta en nuestra lista, a través del parámetro "choice_label".

Esto nos permite mostrar una etiqueta más agradable que solo el id. Pero para esto, debemos agregar los siguientes métodos en la entidad del departamento.

//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;
    }
on2many

Adaptar el ejemplo a la versión instalada

Los ejemplos de Symfony y Sonata permanecen ligados a las versiones indicadas en el artículo. Symfony 4.x y Symfony 6.2 ya no se mantienen: para un proyecto actual, utilice una rama mantenida y la documentación que corresponda exactamente a sus dependencias.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Antes de retomar el código, controle las firmas, los servicios, las rutas y las plantillas correspondientes. Después, agregue una prueba funcional que cubra los permisos, el código HTTP y el resultado visible.

Referencia: versiones de Symfony mantenidas.

Compartir este artículo