Как добавить поле автозаполнения в форму Symfony2 для коллекции и использования Propel?

Я использую формы 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 и возможностью выбора нескольких объектов (, например. собрание книг )?

9
задан Community 23 May 2017 в 12:24
поделиться