Używam formularzy Symfony 2.1 z PropelBundle i próbuję refaktoryzować formularz, który miał listę rozwijaną obiektów (do wyboru), aby zamiast tego użyć pola autouzupełniania jquery (praca z AJAX). Na liście rozwijanej używałem następujący kod (który pracował idealnie dla rozwijanym) w swoim rodzaju forma:Jak dodać pole autouzupełniania w formularzu Symfony2 do gromadzenia i używania Propela?
$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,
));
W trosce o dając trochę kontekst, powiedzmy, że tworzymy nowy „Reader "obiekt i chcielibyśmy wybrać ulubione książki Czytelnika z listy dostępnych obiektów" Książki ". Używany jest typ kolekcji, dzięki czemu wiele "ulubionych książek" można wybrać w nowym formularzu "Czytnik". Teraz chciałbym zmienić powyższe, aby użyć autouzupełniania. W tym celu próbowałem zaimplementować Data Transformer to be able to get a Book object from a simple text field, który może być użyty do funkcji autouzupełniania w celu przekazania identyfikatora książki, jak wskazano w the answer to this Question. Jednak nie byłem w stanie wymyślić, jak sprawić, aby Transformator danych działał z typem kolekcji i klasami Propela. Stworzyłem klasę BookToIdTransformer jak wskazano w Symfony Cookbook i próbowałem następujące w „ReaderType” file:
$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)
);
z powyższym mam „wezwanie do metody niezdefiniowanej: getId” wyjątek (podobno Transformer spodziewa PropelCollection of Books, a nie pojedynczy obiekt Book ..). Czy ktoś wie, jak to zrobić? lub daj mi znać, czy istnieją inne sposoby implementacji autouzupełniania w Symfony za pomocą Propela i pozwalające na wybranie wielu obiektów (np. zbiór książek)?
Dzięki za dokładne wyjaśnienie. Jeśli masz wiele akcji kontrolera, które powinny zwracać odpowiedzi JSON, polecam FOSRestBundle – Narretz
czy możesz dodać fragment widoku/formularza, proszę? – timaschew
@timaschew jeśli dobrze pamiętam (nie potrzebowałem tego), kod w widoku jest po prostu standardowy dla formularzy symfony. To pole jest zwykłym wprowadzaniem tekstu. Funkcja autouzupełniania jest dodawana do tego wejścia przez wtyczkę Tokeninput za pomocą javascriptu z użyciem id input: $ ("# my-text-input"). TokenInput ("/ url/to/your/script /"); – RayOnAir