EasyAdmin vistas + Doctrine y combo de valores en relación de entidades

Buenas noches:

Quería realizar dos consultas totalmente distintas, quizá lo mejor hubiese sido abrir un hilo por cada una, lo que pasa, que aunque son diferentes, la segunda ha surgido a consecuencia de la primera.

¡Ahí van!:

  1. EasyAdmin vistas: Buscando soluciones a los distintos problemas que me surgieron al intentar integrar Sonata con Symfony 2.7, encontré el Bundle EasyAdmin, que no conocía y creo que éste es el mejor sitio para plantear preguntas acerca del bundle.

    • La primera consulta que me ha surgido es la personalización de las vistas mediante plantillas. He visto la documentación, pero si me he enterado bien, todo se haría mediante YAML, con lo que personalmente pierdo un poco de control en la presentación (seguramente por falta de experiencia o conocimiento del bundle). Los formularios son los que más respeto me dan, porque me gustaría tener más control sobre ellos, principalmente en algunos complejos que me gustaría mostrar agrupados o por 'pasos' o por tabs. ¿Habría posibilidad de controlar éstas vistas mediante plantillas, por ejemplo, para incluir algunos widgets o lo que comentaba de los formularios?
    • La segunda consulta es acerca del menú. Tengo la misma sensación de falta de control sobre la presentación del menú. Por ejemplo, no sé cómo filtrar las opciones en función del rol del usuario, o bien, cómo agrupar opciones, etc. Estoy seguro que es por la misma falta de experiencia de comentaba antes.
  2. Doctrine y combo de valores en relación de entidades: Cómo decía, son consultas completamente independientes, pero ésta me ha surgido al probar el alta de un elemento a través de un formulario, en el que se debería mostrar un combo con los valores de otra tabla. El combo es de un formulario de registro de contacto, que mostraría los tipos de vía disponibles. Como he querido contemplar todos los tipos de vía posible, decidí cargarlos en una tabla distinta, así que tengo dos entidades relacionadas: `DatosContacto' y 'TipoVia'

Al ir al formulario de registro, me devuelve el siguiente error: Catchable Fatal Error: Object of class AppBundle\Entity\TipoVia could not be converted to string

El mapeo de la entidad DatosContacto debe ser unidireccional y he puesto lo siguiente:

[...]
    /**
     * @ORM\OneToOne(targetEntity="TipoVia")
     */
    protected $tipoVia;
 
    ...
 
    /**
     * Set tipoVia
     *
     * @param string $tipoVia
     * @return DatosContacto
     */
    public function setTipoVia($tipoVia)
    {
        $this->tipoVia = $tipoVia;
 
        return $this;
    }
 
    /**
     * Get tipoVia
     *
     * @return array
     */
    public function getTipoVia()
    {
        return $this->tipoVia;
    }
[...]

La idea es recuperar un array que alimente un combo de tipos de vía y, como es evidente, no lo estoy haciendo correctamente.

Espero que me puedan ayudar.

Muchas gracias y saludos.

Respuestas

#1

Hola,

Lo primero, me corrijo a mí mismo respecto a la 2ª pregunta, puesto que lo tenía realmente mal planteado y me he complicado la vida queriendo hacer esa relación. Dejo el campo como tipo string y listo.

Voy a seguir mirando cómo planteo el resto y a releer con calma la documentación del Bundle.

Saludos.

#2

Respecto a la segunda pregunta, es tan simple como escribir la funcion __toString() en tu entidad.

[...]
    /**
     * @ORM\OneToOne(targetEntity="TipoVia")
     */
    protected $tipoVia;
 
    public function __toString(){
        return $this->tipoVia();
    }
    ...
 
    /**
     * Set tipoVia
     *
     * @param string $tipoVia
     * @return DatosContacto
     */
    public function setTipoVia($tipoVia)
    {
        $this->tipoVia = $tipoVia;
 
        return $this;
    }
 
    /**
     * Get tipoVia
     *
     * @return array
     */
    public function getTipoVia()
    {
        return $this->tipoVia;
    }
[...]