diff --git a/modules/backend/classes/FormField.php b/modules/backend/classes/FormField.php index 3ebaf1b56..a8980ae6e 100644 --- a/modules/backend/classes/FormField.php +++ b/modules/backend/classes/FormField.php @@ -467,6 +467,7 @@ class FormField $triggerField = array_get($this->trigger, 'field'); $triggerCondition = array_get($this->trigger, 'condition'); $triggerForm = $this->arrayName; + $triggerMulti = ''; // Apply these to container if (in_array($triggerAction, ['hide', 'show']) && $position != 'container') { @@ -486,11 +487,18 @@ class FormField $triggerForm = HtmlHelper::reduceNameHierarchy($triggerForm, $triggerFieldParentLevel); } + // Preserve multi field types + if (Str::endsWith($triggerField, '[]')) { + $triggerField = substr($triggerField, 0, -2); + $triggerMulti = '[]'; + } + + // Final compilation if ($this->arrayName) { - $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'; + $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'.$triggerMulti; } else { - $fullTriggerField = $triggerField; + $fullTriggerField = $triggerField.$triggerMulti; } $newAttributes = [ diff --git a/tests/unit/backend/widgets/FormTest.php b/tests/unit/backend/widgets/FormTest.php new file mode 100644 index 000000000..8fdaa7e4c --- /dev/null +++ b/tests/unit/backend/widgets/FormTest.php @@ -0,0 +1,41 @@ + new FormTestModel, + 'arrayName' => 'array', + 'fields' => [ + 'trigger' => [ + 'type' => 'checkboxlist', + 'options' => [ + '1' => 'Value One' + ] + ], + 'triggered' => [ + 'type' => 'text', + 'trigger' => [ + 'field' => 'trigger[]', + 'action' => 'show', + 'condition' => 'value[1]' + ] + ] + ] + ]); + + $form->render(); + + $attributes = $form->getField('triggered')->getAttributes('container', false); + $this->assertEquals('[name="array[trigger][]"]', array_get($attributes, 'data-trigger')); + } +}