Skip to content

Commit a6a433c

Browse files
committed
Fix an error when saving field layouts for complex fields that might contain closures
1 parent 46e045d commit a6a433c

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

src/services/Fields.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use verbb\formie\Formie;
55
use verbb\formie\base\Field;
66
use verbb\formie\base\FieldInterface;
7-
use verbb\formie\base\NestedFieldInterface;
87
use verbb\formie\base\SubFieldInterface;
98
use verbb\formie\base\SubFieldInnerFieldInterface;
109
use verbb\formie\elements\Form;
@@ -640,7 +639,12 @@ public function saveLayout(FieldLayout $layout): bool
640639
$transaction = Craft::$app->getDb()->beginTransaction();
641640

642641
// Use `unserialize/serialize` instead of `clone()` to deeply clone objects.
643-
$previousPages = unserialize(serialize($layout->getPages()));
642+
// Fallback to model re-instantiation if some field state includes closures.
643+
try {
644+
$previousPages = unserialize(serialize($layout->getPages()));
645+
} catch (Throwable $e) {
646+
$previousPages = array_map(fn(array $page) => new FieldLayoutPage($page), $layout->getFormBuilderConfig());
647+
}
644648

645649
foreach ($layout->getPages() as $pageKey => $page) {
646650
$page->layoutId = $layout->id;

0 commit comments

Comments
 (0)