Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Transformacja danych przed zapisem
mundeck
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 2.09.2012

Ostrzeżenie: (0%)
-----


Chciałbym przed zapisem danych z formularza w Symfony przekształcać je do odpowiedniego formatu. Przykładowo, jeśli użytkownik wpisze numer telefonu "123-123-123" to w bazie powinno być zapisane: "+48123123123". Próbowałem zastosować CallbackTransformer wg dokumentacji, ale to raczej służy formatowaniu w polach formularza, a nie w celu zapisania do bazy. Oczywiście mógłbym stworzyć sobie serwis i wrzucać sobie do niego wartość tego pola, ale czy są może jakieś lepsze, wbudowane w SF rozwiązania?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Wykorzystywanie Doctrine'owskiej encji w formularzu jest o tyle złe, że nagle jedna klasa zaczyna być odpowiedzialna za wiele różnego rodzaju zadań - jedno to obsługa modelu bazodanowego, drugie to obsługa jakiegoś konkretnego formularza.
2. W przypadku encji dodatkowym niebezpieczeńtwem jest to, że nawet nieprawidłowy (z punktu widzenia waildacji) formularz zmienia właściwości encji, jeżeli gdzieś dalej będziesz przypadkiem ją aktualizować (w jakimś fragemncie niezwiązanym z samym formularzem) możesz się nieciekawie zaskoczyć.
3. Nie jesteś zmuszony korzystać z komponentu formularzy. To co potrzebujesz osiągnąć można zrobić przy jego pomocy (wspomniane form events). Jeśli jednak nie czusz się w jego ramach "na siłach" możesz sobie ręcznie wykonać obsługę takiego formularza posiłkując się np. komponentem od samej walidacji.
4. Pamiętaj, że "szybciej i łatwiej" bardzo często nie oznacza "najmniejszą ilością kodu". Utworzenie dodatkowej klasy, stricte pod reprezentację modelu formularza oraz kilka linijek na zmapowanie danych przy poprawnym wypełnieniu ów formularza to 5 minut roboty.
5. To, że klasa reprezentująca dane z formularza i klasa encji ma trochę pokrywających się pól nie sprawia, że są tożsame.
5.1. Klasa od formularza co najwyżej zawiera zapewne mały podzbiór pol encji. Na pewno nie dajesz w niej właściwości typu ID, zapewne nie wszystkie relacje można zmieniać w tym formularzu itp.
5.2. Obiekt danych z formularza nie jest w żaden sposób powiązany z EntityManagerem Doctrine'a. Nie jest przedmiotem cyklu jego pracy - tutaj patrz na punkt #2.
6. Jesteś pewien, że data transformers podpiąłeś w odpowiednim miejscu? http://symfony.com/doc/current/form/data_t...ew-transformers
7. Pomysł zaproponowany przez @Pilsener by wykorzystać JS również nie jest najgorszy. Przy czym niezgodziłbym się ze stwierdzeniem, że z DataTransformers nie możesz korzystać nawet przy jednorazowym użyciu.

Ten post edytował Crozin 24.04.2017, 17:44:10
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:24