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