- Affected Version
- WoltLab Suite 5.3
- Affected App
- WoltLab Suite Core
Hallo,
ich versuche aktuell das UserFormField inerhalb eines DialogFormDocument zu verwenden. Prinzipiell geht das auch. Wenn man allerdings einen Standardwert via ->value(...) setzt und im Formular stumpf auf Absenden drückt (ohne den Wert zu verändern), wird der Wert nicht an die submit-Methode übergeben.
Hier mal ein Beispiel aus einer Action-Klasse:
protected $form;
protected function getForm()
{
if ($this->form === null) {
$this->form = DialogFormDocument::create('dialogForm')
->appendChildren([
TextFormField::create('test')
->label('Test')
->required(),
UserFormField::create('user')
->label('Benutzer')
->value(WCF::getUser()->userID)
]);
$this->form->build();
}
return $this->form;
}
public function validateGetDialog()
{
// implement
}
public function getDialog()
{
return [
'dialog' => $this->getForm()->getHtml(),
'formId' => $this->getForm()->getId()
];
}
public function validateSubmitDialog()
{
$this->getForm()->requestData($this->parameters['data'] ?? []);
$this->getForm()->readValues();
$this->getForm()->validate();
}
public function submitDialog()
{
if ($this->getForm()->hasValidationErrors()) {
return [
'dialog' => $this->getForm()->getHtml(),
'formId' => $this->getForm()->getId()
];
}
// implement
wcfDebug($this->getForm()->getData());
return [
// ...
];
}
Display More
Das Formular sieht wie gewünscht so aus:
Wenn ich jetzt ohne Veränderungen des Benutzers auf Absenden drücke, sieht die Ausgabe wie folgt aus:
Hier erwarte ich eigentlich, dass user die richtige User-ID beinhalten würde und nicht 0.
Wenn man das Ganze in einem normalen FormField auf einer normalen Form-Seite macht, funktioniert es übrigens. Lediglich über das DialogFormDocument funktioniert es nicht.
Ich habe zum Testen ein Test-Plugin angehängt. Die Seite, womit sich der Dialog öffnen lässt, heißt UserFormTestPage.