[SF][SF3] Data transformer |
[SF][SF3] Data transformer |
11.04.2018, 09:16:34
Post
#1
|
|
Grupa: Zarejestrowani Postów: 199 Pomógł: 2 Dołączył: 9.06.2008 Ostrzeżenie: (0%) |
Zastanawiam się jak podejść do takiego tematu: mam dwie entity:
Product , ProductDocument z relacją ManyToOne (zdjęcia do produktu). Uzytkownik dodaje produkt (form builder) w tym formularzu mam odrazu pole typu hidden w którym wrzucam nazwy plików (document) które wgrał przez plugin ajaxowy. Czyli wartość tego pola będzie przykładowo:
Potrzebuje z powyższego stringa wyciągnąć nazwę pliku , stworzyć obiekt ProductDocument i powiazać z Product. W obecniej chwili ten formularz zapisuje mi Product , natomiast ProductDocument tez dodaje się ale bez powiazania z Product, ponadto dodaj mi pełną wartość do nazwy ""plik1.jpg;plik2.jpg;plik3.jpg"" zamiast każdy oddzielnie. Wiem że trzeba użyć explode(';'.$wartosc) ale nie wiem gdzie w ProduktForm mam
DataTransformer.php
|
|
|
11.04.2018, 10:04:52
Post
#2
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) |
1. Uważam że pole Hidden jest zbędne.
Dodajesz zdjęcia za pomocą AJAXa więc od razu powinno być przypisanie do Produktu. 2. Pole ze zdjęciami jest Kolekcją więc transformer powinien zmieniać string na kolekcję i odwrotnie, \ nie obchodzi cię nic więcej bo Symfony zajmie się zapisem . 3. Ale jeśli chcesz na siłe mieć to pole w tej formie to przykładowo w kontrolerze/menadżerze możesz wyciągnąć dane z pola zdjęcie, tak jak napisałeś explode i przypisać pliki do produktu np.
-------------------- Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
|
|
|
11.04.2018, 11:27:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 199 Pomógł: 2 Dołączył: 9.06.2008 Ostrzeżenie: (0%) |
ok ale jak bym zastosował się do Twoich rad z pkt 1
To jak mam przypisać zdjęcia do produktu skoro produkt jeszcze nie jest zapisany ? |
|
|
14.04.2018, 21:45:30
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Wystarczy użyć standardowej kolekcji:
https://symfony.com/doc/current/reference/f...collection.html Nie trzeba żadnych pól typu hidden czy data transformerów, robisz pole formularza typu "MyFile", jak klikasz "dodaj zdjęcie" to JS tworzy nowe pole na podstawie prototype (jest nawet gotowy JS w dokumentacji) Można tez użyć standardowego pola typu file, ale własne jest lepsze bo można od razu tam wrzucić np. miniaturkę fotki, dodatkowy checkbox "usuń zdjęcie", jakiś własny event listener itp. Tego typu rozwiązania (np. dodawanie wielu adresów do jednego usera) są w Symfony dość oklepane - wystarczy dokumentacja i trochę praktyki. A jak chcesz robić po swojemu to nie mieszaj do tego formularzy Symfony, bo szkoda czasu na tego typu protezy czy workaroundy. |
|
|
16.04.2018, 15:17:27
Post
#5
|
|
Grupa: Zarejestrowani Postów: 199 Pomógł: 2 Dołączył: 9.06.2008 Ostrzeżenie: (0%) |
ok zrobiłem z CollectionType i teraz mam tak że dodaje mi produkt i zdjęcia ale zdjęcia nie są powiązane z produktem w którym były dodawane, (brak jest uzupełnionego product_id)
productForm.php mam tak:
productDocumentForm.php
enityty product.php:
entity productDocument.php"
|
|
|
17.04.2018, 07:07:34
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
To zobacz jeszcze to:
https://symfony.com/doc/current/form/form_collections.html Ciebie powinien szczególnie interesować fragment Doctrine: Cytat Cascading Relations and saving the "Inverse" side I trzeba starać się samemu sobie radzić, jest debug tool, można tam zobaczyć request, co jest w formularz, czy encje są dobrze zmapowane i tak dalej. ProductDocumentForm powinien zwracać encję ProductDocument, to też trzeba sprawdzić. Debugger wszystko powie. |
|
|
17.04.2018, 10:01:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 199 Pomógł: 2 Dołączył: 9.06.2008 Ostrzeżenie: (0%) |
Dziękuję za pomoc jesteś wielki
btw. brakowało mi czegoś takiego
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 19:16 |