__inheritances Operator

Zielstellung

Das TYPO3 Form Framework - Teil des TYPO3 Kerns seit Version 8.5 - ist sehr flexibel. Oftmals kannst Du Deine Anpassungen und Erweiterungen rein durch YAML Konfiguration vornehmen. Heute will Dir Ralf - Lead Developer des Form Frameworks - zeigen, was es mit dem extrem mächtigen "__inheritances" Operator auf sich hat. Das Ganze beleuchtet er am Beispiel des Repeatable Form Elements. Vielleicht schaust Du dort mal vorbei, um den Kontext zu verstehen.

Der __inheritances Operator ist ein Kopierbefehl, welcher nach dem Kopieren erlaubt, Werte zu überschreiben, zu löschen oder hinzuzufügen.

Schauen wir uns zum Verständnis exemplarisch die Definition des RepeatableContainer Formularelements in der Datei EXT:repeatable_form_elements/Configuration/Yaml/FormSetup.yaml und die Standardkonfiguration des Fieldset Formularelements an. Der Übersichtlichkeit halber wird nachfolgend auf die Auflistung der formEditor Eigenschaften verzichtet. Weiterhin wurden bei der Auflistung der Fieldset Eigenschaften die darin enthaltenen __inheritances Operatoren bereits aufgelöst.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TYPO3:
  CMS:
    Form:
      prototypes:
        standard:
          formElementsDefinition:
            RepeatableContainer:
              __inheritances:
                10: 'TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.Fieldset'
              implementationClassName: 'TRITUM\RepeatableFormElements\FormElements\RepeatableContainer'
              properties:
                minimumCopies: 0
                maximumCopies: 10
                showRemoveButton: true
                elementClassAttribute: 'repeatable-container'
Snippet 1: TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.RepeatableContainer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TYPO3:
  CMS:
    Form:
      prototypes:
        standard:
          formElementsDefinition:
            Fieldset:
              implementationClassName: TYPO3\CMS\Form\Domain\Model\FormElements\Section
              properties:
                containerClassAttribute: input
                elementClassAttribute: ''
                elementErrorClassAttribute: error
              renderingOptions:
                _isCompositeFormElement: true
Snippet 2: TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.Fieldset

Die __inheritances Anweisung in der Konfiguration des RepeatableContainer Formularelements (siehe Snippet 1, Zeilen 8 und 9), sorgt dafür, dass alles, was unter TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.Fieldset definiert ist, nach TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.RepeatableContainer kopiert wird. Das Resultat nach dem Kopiervorgang ist nun Folgendes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
TYPO3:
  CMS:
    Form:
      prototypes:
        standard:
          formElementsDefinition:
            RepeatableContainer:
              implementationClassName: TYPO3\CMS\Form\Domain\Model\FormElements\Section
              properties:
                containerClassAttribute: input
                elementClassAttribute: ''
                elementErrorClassAttribute: error
              renderingOptions:
                _isCompositeFormElement: true
Snippet 3: Resultat nach dem Kopiervorgang

An dieser Stelle ist TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.RepeatableContainer identisch mit TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.Fieldset. Nun werden die zusätzlich definierten Eigenschaften (implementationClassName, properties etc.) in TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.RepeatableContainer der Kopie überlagert.

1
2
3
4
5
6
7
8
9
10
11
12
13
TYPO3:
  CMS:
    Form:
      prototypes:
        standard:
          formElementsDefinition:
            RepeatableContainer:
              implementationClassName: 'TRITUM\RepeatableFormElements\FormElements\RepeatableContainer'
              properties:
                minimumCopies: 0
                maximumCopies: 10
                showRemoveButton: true
                elementClassAttribute: 'repeatable-container'
Snippet 4: Zusätzlich definierte Eigenschaften des RepeatableContainer

Das entgültige Resultat ist dann Folgendes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
TYPO3:
  CMS:
    Form:
      prototypes:
        standard:
          formElementsDefinition:
            RepeatableContainer:
              # Überlagerung
              implementationClassName: TRITUM\RepeatableFormElements\FormElements\RepeatableContainer
              properties:
                # originaleigenschaft vom Fieldset
                containerClassAttribute: input
                # Überlagerung
                elementClassAttribute: repeatable-container
                # originaleigenschaft vom Fieldset
                elementErrorClassAttribute: error
                # Überlagerung
                minimumCopies: 0
                # Überlagerung
                maximumCopies: 10
                # Überlagerung
                showRemoveButton: true
              # originaleigenschaft vom Fieldset
              renderingOptions:
                _isCompositeFormElement: true
Snippet 5: Endgültige Konfiguration des RepeatableContainer

Wir hoffen, Dir hat das Tutorial gefallen und einen wichtigen Teil des TYPO3 Form Frameworks dir näher gebracht. Wir freuen uns auf Dein Feedback. All the best and happy coding!