2011-11-18 5 views
5

Soy nuevo en los formularios de Symfony y trato de encontrar la manera de tener un formulario con un campo oculto que haga referencia al objeto principal. Por ejemplo, tengo una lista que tiene una relación de muchos a uno con los contactos. Al crear un nuevo contacto, debe haber un campo oculto con la identificación de la lista a la que se está agregando el contacto.Formulario de Symfony2 - Cómo tener el objeto principal de referencia de campo oculto

Actualmente estoy intentando insertar un formulario llamado ListIdType en mi formulario ContactType. El único campo en el formulario ListIdType es el id de la lista. Esto funciona bien porque puedo configurar la lista en una entidad de contacto vacía y se completará automáticamente un elemento en el formulario denominado contact[list][id] (que se define en el formulario ListIdType). El problema con esto es que cuando envío el formulario, me sale un error que dice que ni el elemento "id" ni methed "setId()" existe en la clase de la lista.

Mi sentimiento es que estoy haciendo algo mal, pero no encuentro ninguna documentación que me indique la dirección correcta.

+0

he encontrado https://github.com/symfony/symfony/pull/1951. ¿Es esa la única solución que hay? Me parece que debería haber una forma nativa de Symfony para hacer esto. – Icode4food

+2

La forma correcta de tratar eso es con "Transformadores de datos", vea http://symfony.com/doc/current/cookbook/form/data_transformers.html – KevinS

+0

Si tenemos suerte, HiddenEntityType pronto llegará a Symfony: https://github.com/symfony/symfony/issues/8293 – webDEVILopers

Respuesta

6

La solución que se me ocurrió es agregar un campo oculto con la opción property_path establecida en FALSE. Aquí está el código en ContactType::buildForm:

$builder->add('list_id', 'hidden', array(
     'data' => $data->getList()->getId(), 
     'property_path' => FALSE, 
    )); 

entonces manejar el campo en mi controlador.

Esto funciona pero no se siente como la mejor solución para mí. ¡Todavía estoy abierto si alguien puede sugerir una mejor manera!

3

Recientemente he encontrado el paquete de Gregwar's Forum, que agrega el tipo de formulario entity_id. Hace automáticamente la mayoría de las transformaciones necesarias y puede ser justo lo que necesita.

https://github.com/Gregwar/FormBundle

Cuestiones relacionadas