Estoy usando formularios Symfony 2.1 con PropelBundle y estoy tratando de refactorizar un formulario que tenía una lista desplegable de objetos (para seleccionar) para usar un campo de autocompletar de jquery (trabajando con AJAX). Para la lista desplegable que estaba usando el siguiente código (que funcionaba perfectamente para el menú desplegable) en mi tipo de formulario:¿Cómo agregar un campo de autocompletar en un formulario Symfony2 para una colección y usar Propel?
$builder->add('books', 'collection', array(
'type' => 'model',
'options' => array(
'class' => 'MyVendor\MyBundle\Model\Book',
'property' => 'title',
),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
));
En aras de dar un poco de contexto, digamos que estamos creando un nuevo "Lector "Objeto y que nos gustaría seleccionar los libros favoritos del lector de una lista de objetos" Libro "disponibles. Se usa un tipo de colección para que se puedan seleccionar muchos "libros favoritos" en el nuevo formulario "Reader". Ahora, me gustaría cambiar lo anterior para usar autocompletar. Para hacerlo, traté de implementar un Data Transformer to be able to get a Book object from a simple text field que podría usarse para que la función Autocompletar pase la ID del libro como se indica en the answer to this Question. Sin embargo, no pude averiguar cómo hacer que Data Transformer funcione con un tipo de colección y clases Propel. He creado una clase BookToIdTransformer como se indica en el Symfony libro de cocina y trató lo siguiente en el archivo "ReaderType":
$transformer = new BookToIdTransformer();
$builder->add(
$builder->create('books', 'collection', array(
'type' => 'text',
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
))->addModelTransformer($transformer)
);
Con lo anterior, me sale una "llamada a método no definido: getId" excepción (al parecer el transformador de espera una PropelCollection of Books, no un solo objeto Book ...). ¿Alguien sabe cómo hacerlo? o avíseme si hay otras formas de implementar la autocompletar en Symfony utilizando Propel y permitiendo seleccionar varios objetos (por ejemplo, una colección de libros).
Gracias por la explicación detallada. Si tiene muchas acciones del Controlador que deberían devolver respuestas JSON, recomiendo FOSRestBundle – Narretz
¿puede agregar un fragmento de su vista/formulario, por favor? – timaschew
@timaschew si recuerdo bien (terminé no necesitándolo), el código en la vista es solo el estándar usado para los formularios de Symfony. El campo es una entrada de texto regular. La funcionalidad de autocompletar se agrega a esa entrada mediante el complemento Tokeninput usando javascript usando el id de la entrada: $ ("# my-text-input"). TokenInput ("/ url/to/your/script /"); – RayOnAir