Я использую формы Symfony 2.1 с PropelBundle, и я пытаюсь реорганизовать форму, в которой был раскрывающийся -список объектов (для выбора из ), чтобы вместо этого использовать поле автозаполнения jquery (, работающее с АЯКС ). Для выпадающего списка я использовал следующий код (, который отлично работал для перетаскивания -вниз )в моем типе формы:
$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,
));
Ради небольшого контекста предположим, что мы создаем новый объект «Читатель» и хотим выбрать любимые книги Читателя из списка доступных объектов «Книга». Тип коллекции используется для того, чтобы многие «любимые книги» можно было выбрать в новой форме «Чтение». Теперь я хотел бы изменить вышеизложенное, чтобы использовать автозаполнение. Для этого я попытался реализовать преобразователь данных, чтобы получить объект книги из простого текстового поля , который можно было бы использовать для функции автозаполнения для передачи идентификатора книги, как указано в ответ на этот вопрос . Однако мне не удалось понять, как заставить Data Transformer работать с типом коллекции и классами Propel. Я создал класс BookToIdTransformer, как указано в Symfony Cookbook, и попробовал следующее в файле «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)
);
С учетом вышеизложенного я получаю исключение «Вызов неопределенного метода :getId» (, по-видимому, Transformer ожидает PropelCollection of Books, а не один объект Book.. ). Кто-нибудь знает, как это сделать? или дайте мне знать, есть ли другие способы реализовать автозаполнение в Symfony с использованием Propel и возможностью выбора нескольких объектов (, например. собрание книг )?