es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tipo de formulario anidado personalizado EasyAdmin

Tengo una entidad User y una entidad Address que están en una relación OneToOne. Me gustaría mostrar el tipo de dirección en el Crud de User en EasyAdmin, y no encuentro una manera de hacerlo como Symfony ->add('address', AddressType::class).
He probado las siguientes opciones:

CollectionField::new('address')
            ->setEntryIsComplex(true)
            ->setEntryType(AddressType::class)
            ->setFormTypeOptions([
                'by_reference' => false,
                'required' => true
            ]),

Esto permite al usuario agregar tantas direcciones como desee, aunque solo quiero una.

AssociationField::new('address')->hideOnIndex()

Este hace que el usuario elija una dirección existente de una lista. No es una incrustación de un tipo de formulario.

¿Alguien tiene alguna idea?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para mostrar el tipo de dirección en el Crud de Usuario en EasyAdmin es usar la opción de incrustación (embed) en la configuración de EasyAdmin. Aquí tienes un ejemplo de cómo implementarlo:

    1. Primero, define la relación entre las entidades Usuario y Dirección como una relación OneToOne en las clases de entidad, así:
    // User.php
    class User {
        /**
         * @ORM\OneToOne(targetEntity="Address")
         * @ORM\JoinColumn(name="address_id", referencedColumnName="id")
         */
        private $address;
    }
    
    // Address.php
    class Address {
        /**
         * @ORM\Column(type="string", length=255)
         */
        private $type;
    }
    
    1. Luego, en el archivo de configuración de EasyAdmin, agrega la clase Usuario y define el campo de formulario para la entidad Dirección, así:
    # config/packages/easy_admin.yaml
    easy_admin:
      entities:
        User:
          class: App\Entity\User
          form:
            fields:
              - { property: 'name' }
              - { property: 'address.type', type: 'Symfony\Component\Form\Extension\Core\Type\TextType', label: 'Tipo de Dirección' }
    

    En este ejemplo, estamos usando la opción property para indicar la ruta a la propiedad del tipo de dirección dentro de la entidad Usuario. También estamos usando la opción type para especificar el tipo de campo de formulario que se mostrará (en este caso, un campo de texto).

    Con esta configuración, el formulario de EasyAdmin debería mostrar el campo del tipo de dirección en el CRUD de Usuario como un campo incrustado.

Comments are closed.