Sven Kalbhenn Ich konnte deine Frage nun nachvollziehen und lösen.
Mit dieser Condition funktioniert es:
condition: 'formValues && "1" in formValues["ausbildungszentren"]'
Zwei Punkte waren hier zu beachten:
1)
Der Array Operator in
innerhalb der Symfony-Condition erwartet bei x in y
für y
ein Array, da hierbei, wie bereits in der Fehlermeldung benannt, die PHP-Funktion in_array()
hinter den Kulissen verwendet wird.
https://www.php.net/manual/en/function.in-array.php
Wenn das Formular noch nicht verschickt wurde, existiert das Array formValues
zwar, aber es ist leer. Dementsprechend kann auch für den Array-Key "ausbildungszentren"
nichts gefunden werden und es kommt zu dem null-Type Error.
Wenn du einfache Werte des formValues
-Arrays überprüfen wollen würdest, dann ginge dies, wie in der Dokumentation der EXT:form, mit Hilfe der traverse
-Funktion, da diese den Fehlerfall bereits vor dem Absenden abfängt.
traverse(formValues, "der-feld-name") == "der Wert"
Dies kommt in deinem Fall jedoch nicht in Frage, da der Wert des MultiCheckbox
-Feldes selbst ein Array ist und du ja prüfen möchtest, ob sich ein bestimmter Wert in diesem Array befindet.
Die Lösung dieses Teilproblems ist deshalb, in einem vorgelagerten zusätzlichen Schritt zu prüfen, ob formValues
überhaupt existiert und nicht leer ist.
→ formValues && ...
2)
In Symfony Conditions musst du außerdem darauf Acht geben, dass auch der Typ der beiden zu vergleichenden Werte übereinstimmt. In deinem Fall werden die gewählten MultiCheckbox
-Werte jeweils als String geliefert. Dementsprechend musst du im Array nach "1"
statt nach 1
suchen.
Sichtbar gemacht habe ich diese Punkte, indem ich in der Zuständigen Datei vendor/typo3/cms-form/Classes/Domain/Runtime/FormState.php
in der Methode getFormValues()
einfach mal per \TYPO3\CMS\Core\Utility\DebugUtility::debug($this->formValues);
die Werte im Frontend vor und nach dem Absenden ausgeben lassen habe.
Vor dem Versand:
→ Das Array existiert, ist aber leer
nach dem Versand:
→ Die gewählten Werte werden als String geliefert.