Wpis z mikrobloga

Witajcie mirki.

#symfony2

W jaki sposób mając 1 formularz zrobić upload obrazów dla 2 różnych rekordów? Chcę dodać artykuły w różnych językach, używam jednego formularza, mapowanie pól mam ustawione na false i chcę zapisać to do DB w taki sposób:
id | langid | title | content | image
id | langid | title | content | image

Jeżeli to robię w taki sposób:
Kontroler: http://pastebin.com/9k36TcuZ
Formularz: http://pastebin.com/Wkxzyz1R
Encja: http://pastebin.com/KAABijUr
To w bazie danych w kolumnach z obrazkiem mam NULL zamiast nazwy pliku. Pliki też nie uploadują się do katalogu web/uploads.

#php #webdev
  • 8
@mariecziek: zrób sobie osobny obiekt DTO (data transfer object), zwykla klasa z publicznymi polami, takimi samymi jak w formularzu. Podajesz go do FormType zamiast encji. Następnie tworzysz sobie serwis, w którym ląduje kod z kontrolera, który ma za zadanie przyjąć obrazki, podstawić dane pod encje, zaktualizować encję w bazie. Voila. Taki klasyczny układ command (dto) - handler (serwis). Wydaje się droga dookoła, ale łatwiej to otestować, oddzielić odpowiedzialności itd.
@uirapuru: Ale to nie w tym jest problem. Obiekt $articleLt jest zapisywany do bazy danych bez żadnych problemów. Problem pojawia się przy zapisywaniu obiektu $articleEn, ponieważ $smallImageFile i $largeImageFile już istnieją, ale nie ma ich w katalogu /tmp
@mariecziek: po 1. chyba nigdzie go nie kopiujesz i bedziesz mieć w encji odniesienie do pliku w /tmp a po 2. jeśli dobrze pamiętam to jest to jakaś klasa, chyba UploadedFile z Symfony i on po persystencji chyba sam robił na sobie move() do innego katalogu. ale tu nie widze kodu, który by go gdzieś przenosił. Ogólnie dziwnie zrobiłeś :) ja bym to sobie uprościł, a tak... musisz odpalić xdebuga i
@uirapuru: Dopiero się uczę tego frameworka, więc nie wiem co mam upraszczać i w jaki sposób. Do tej pory pracowałem z Yii1.13, więc muszę przyzwyczaić się do różnic w frameworkach. No i dlatego korzystam z dokumentacji. W dokumentacji miałem podany taki sposób zapisywania plików, więc z takiego korzystam.
Co mnie strasznie wnerwia, to fakt, że do bazy danych zapisuję string, a muszę podać obiekt, no po cholerę mam tam pakować cały
@mariecziek: wcale nie musisz podać obiektu, prawde mówiąc nei wiem czemu tak zrobiłeś. używasz jakiegoś tutoriala? domyślam się, że obiekt się serializuje do stringa. natomiast co do mojej propozycji z pierwszego posta - nie jest ona zależna od frameworka i tak samo mógłbyś zrobić gdziekolwiek.

U siebie zrobiłem coś takiego, jak widać jest serwisik do obsługi danych z formularza przesłanych jako $command,

https://github.com/gyman/app/blob/develop/src/Gyman/Bundle/AppBundle/Services/SettingsUpdateHandler.php

a w nim jest drugi, zajmujący się tylko