Załóżmy, że tworzę niestandardowe typy formularzy jako usługi, tak jak jest to opisane w Symfony documentation. Ale chcę 2 rodzaje „gender” niestandardowych, z 2 różnych parametrów wejściowych, które robiłem tak w Symfony 2.7:Aktualizacja Symfony 2.8/3.0: jak radzić sobie z typami formularzy ze zmiennymi parametrami?
# app/config/config.yml
parameters:
genders1:
m: Male
f: Female
genders2: # This makes no sense at all, but it is for the example purpose!
h: Horse
t: Turtle
, a potem byłem deklarując 2 usługi tak:
<!-- src/AppBundle/Resources/config/services.xml -->
<service id="app.form.type.gender1" class="AppBundle\Form\Type\GenderType">
<argument>%genders1%</argument>
<tag name="form.type" alias="gender1" />
</service>
<service id="app.form.type.gender2" class="AppBundle\Form\Type\GenderType">
<argument>%genders2%</argument>
<tag name="form.type" alias="gender2" />
</service>
jak widać, byłem przy użyciu samoGenderType
klasa dla 2 typów formularza niestandardowego (z gender1
i gender2
aliasów), które można używać tak:
$builder
->add('field1', 'gender1')
->add('field2', 'gender2');
To pozwoliło mi dodać trochę wspólnej logiki tylko w jednej klasie (GenderType
) z różnymi parametrami wejściowymi (w tym przykładzie mam znacznie więcej możliwości niż 2).
Jednak od wersji Symfony 2.8 dodanie pola za pomocą aliasu usługi jest przestarzałe. Nazwa klasy musi być przekazana jako drugi argument, zamiast, jak to:
$builder->add('field1', GenderType::class)
Więc jak mogę sprawić, że różnica między 2 moich usług (każdy z nich nie posiadające te same parametry wejściowe)?
Utworzenie Gender1Type
i Gender2Type
poszerzenia klasy abstrakcyjnej byłoby bardzo bolesne, ponieważ musiałbym stworzyć wiele klas z pustą zawartością.
Czy masz pojęcie, jak wdrożyć mój wzorzec w Symfony 2.8, utrzymując usługi o różnych parametrach wejściowych, ale nie tworząc wielu klas?
Tak. Wpadłem na to samo i doszedłem do tego samego wniosku. Używanie nazw klas ma wiele zalet, ale w tym przypadku nadal nie widzę wyraźnej przewagi nad oryginalnym projektem. No cóż. – Cerad