2015-12-07 4 views
5

Nehmen wir an, ich erstelle benutzerdefinierte Formulartypen als Dienste, wie es in der Symfony documentation beschrieben ist. Aber ich will 2 „Geschlecht“ benutzerdefinierte Typen, mit 2 verschiedenen Eingabeparameter, die ich in Symfony 2.7 wie dies zu tun:Symfony 2.8/3.0 Upgrade: Wie man mit Formulartypen mit variablen Parametern umgehen kann?

# 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 

Und dann wurde ich erklärt 2-Dienste wie folgt aus:

<!-- 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> 

wie Sie sehen können, ich war die gleicheGenderType Klasse für 2 benutzerdefinierte Formulartypen (mit dem gender1 und gender2 Aliase), die ich könnte wie folgt verwenden:

$builder 
    ->add('field1', 'gender1') 
    ->add('field2', 'gender2'); 

Dadurch konnte ich einige gemeinsame Logik in nur einer Klasse (GenderType) mit verschiedenen Eingangsparametern hinzufügen (ich habe viel mehr Möglichkeiten als 2 in diesem Beispiel).

Ab Symfony 2.8 ist das Hinzufügen eines Felds mit dem Dienstalias veraltet. Der Klassenname hat als zweites Argument übergeben werden stattdessen wie folgt aus:

$builder->add('field1', GenderType::class) 

Wie kann ich den Unterschied zwischen meinem 2-Dienste machen (jeder von ihnen nicht die gleichen Eingangsparametern)?

Erstellen Gender1Type und Gender2Type Erweiterung einer abstrakten GenderType Klasse wäre wirklich schmerzhaft, da ich viele Klassen mit leeren Inhalt erstellen müsste.

Haben Sie eine Idee, wie Sie mein Muster in Symfony 2.8 implementieren können, indem Sie Dienste mit verschiedenen Eingabeparametern beibehalten, aber nicht viele Klassen erstellen?

Antwort

3

Nun, nach dem Graben dieses Thema ein bisschen mehr, someone already asked die Frage direkt in der PR concerning this change in Symfony 2.8.

Und die Antwort ist, dass das Muster, das ich tat, nicht mehr möglich ist, so sehe ich 2 Lösungen zu meinem Problem:

  • so viele Klassen erstellen, wie ich stattdessen Dienste für meine benutzerdefinierten Typen hatte alle mit die Zeit die gleiche Klasse, und diese Klassen erweitern eine abstrakte (in meinem Beispiel: Gender1Type erstellen und Gender2Type Klassen, die eine AbstractGenderType abstrakte Klasse zu erweitern)
  • Halten Sie nur eine Klasse, aber fügen Sie Optionen, um meine spezifischen Parameter zu übergeben.
+1

Ja. Ich stieß auf dasselbe und kam zu demselben Schluss. Es gibt Vorteile bei der Verwendung von Klassennamen, aber in diesem Fall sehe ich immer noch keinen klaren Vorteil gegenüber dem ursprünglichen Design. Naja. – Cerad

Verwandte Themen