2015-12-07 12 views
5

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?

Odpowiedz

3

Cóż, po przekopaniu tego tematu nieco więcej, someone already asked pytanie bezpośrednio w PR concerning this change w Symfony 2.8.

A odpowiedź jest taka, że ​​wzór robię nie jest już możliwe, więc widzę 2 rozwiązania mojego problemu:

  • utworzyć dowolną liczbę klas, jak miałem usługi dla moich typów niestandardowych zamiast korzystać wszyscy czas w tej samej klasie i spraw, aby te klasy rozszerzyły się na abstrakcyjne (w moim przykładzie: stwórz klasy Gender1Type i Gender2Type, które rozszerzają klasę abstrakcyjną AbstractGenderType)
  • Przechowuj tylko jedną klasę, ale dodaj do niej opcje, aby przekazać moje określone parametry.
+1

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

Powiązane problemy