2016-01-27 23 views
8

Od pewnego czasu pracuję z Symfony Framework i zawsze zastanawiałem się nad tymi pytaniami.Dlaczego elementy formularzy są nazywane typami w Symfony Framework?

Dlaczego elementy formularzy nazywają się Typy w Symfony Framework?

Dziękuję za wyjaśnienie mi.

+3

Należy poprosić o Bernhard Schussek. Jest twórcą formy symfony. Był bardzo aktywny w gitter: https://gitter.im/puli/issues. Kiedy otrzymasz odpowiedź, podziel się z nami. ;) – felipsmartins

Odpowiedz

5

Wynika to z faktu, że możesz je łączyć, jak chcesz. Jeśli utworzysz niestandardowy typ formularza zawierający wszystkie pola, które chcesz wyświetlić na określonej stronie (tak jak robię to normalnie dla każdego tworzonego formularza), możesz ponownie użyć tego formularza w innych formach.

Jednym z przykładów może być typ formularza dla adresów. W widoku adresu używaj tylko formularza adresowego do edycji adresów. Ale teraz myśl, że masz stronę, aby stworzyć nowego klienta. Jednostka klienta na przykład ma związek z adresem. Zamiast powtarzać niezbędne pola w tym typie formularza, można po prostu podać jedno pojedyncze pole o nazwie adres z typem już zdefiniowanego typu adresu. Teraz formularz adresu jest osadzany bezpośrednio na tej pozycji, a także zapewnia utworzenie obiektu odpowiedniego typu w celu ustawienia go we właściwości encji adresu użytkownika później, po powiązaniu żądania z formularzem.

Powróćmy do pierwotnego pytania: Jeśli rozumiesz tę koncepcję łączenia ze sobą formularzy, możemy rzucić okiem na DateType. Typ DateType może być skonfigurowany jako jedno pole wejściowe HTML5 lub wyświetlane jako trzy osobne pola wyboru (jeden na rok, miesiąc i dzień). Ta koncepcja jest dokładnie taka sama. DateType definiuje pola każdego z nich jako ChoiceType. Oprócz tego DateType definiuje konwertery, które są wyzwalane podczas wiązania danych do formularza, aby zapewnić, że obiekt da PHP DateTime został poprawnie przekonwertowany na te trzy oddzielne wartości i odwrotnie.

Możemy też sobie wyobrazić, że idziemy o jeden poziom wyżej i wyobrażamy sobie DateTimeType. Tego typu kraty są dość proste, jeśli masz już DateType i TimeType. Po prostu musisz zdefiniować dwa pola, które ponownie wykorzystują te typy i dokonują konwersji.

Dla ChoceType mamy również przykład, że wewnętrznie używa RadioType i CheckboxType i SelectType do wyświetlania różnych smaków z wyboru formularzy.

Jak widać różnica między tym, co nazwalibyśmy kompletną częścią formularza a pojedynczym polem, jest bardzo marginalna i teoretyczna. Dlatego symfony nie ma tu żadnej różnicy w nazewnictwie.

Niektóre dalsze linki do dokumentacji: How to Create a Custom Form Field Type

+0

Świetne wyjaśnienie, dziękuję! Być może mniej mylącą nazwą mogłoby być * FormWidget *, * Widget *, * FormControl *, * Control *, * UserControl *? Wiem, że * widżet * istnieje już jednak jako inna koncepcja w Symfony. –