浏览代码

修复使用 layout 布局后 HasMany 删除字段验证无效

Tall 2 年之前
父节点
当前提交
4b6e257e84
共有 3 个文件被更改,包括 17 次插入3 次删除
  1. 4 1
      src/Form/Field/ArrayField.php
  2. 4 2
      src/Form/Field/HasMany.php
  3. 9 0
      src/Form/Layout.php

+ 4 - 1
src/Form/Field/ArrayField.php

@@ -68,7 +68,10 @@ class ArrayField extends HasMany
 
         call_user_func($this->builder, $form);
 
-        $form->hidden(NestedForm::REMOVE_FLAG_NAME)->default(0)->addElementClass(NestedForm::REMOVE_FLAG_CLASS);
+        $hidden = $form->hidden(NestedForm::REMOVE_FLAG_NAME)->default(0)->addElementClass(NestedForm::REMOVE_FLAG_CLASS);
+
+        // 使用column布局之后需要重新追加字段
+        $form->layout()->appendToLastColumn($hidden);
 
         return $form;
     }

+ 4 - 2
src/Form/Field/HasMany.php

@@ -413,9 +413,11 @@ class HasMany extends Field
 
         call_user_func($this->builder, $form);
 
-        $form->hidden($this->getKeyName());
+        $hidden[] = $form->hidden($this->getKeyName());
+        $hidden[] = $form->hidden(NestedForm::REMOVE_FLAG_NAME)->default(0)->addElementClass(NestedForm::REMOVE_FLAG_CLASS);
 
-        $form->hidden(NestedForm::REMOVE_FLAG_NAME)->default(0)->addElementClass(NestedForm::REMOVE_FLAG_CLASS);
+        // 使用column布局之后需要重新追加字段
+        $form->layout()->appendToLastColumn($hidden);
 
         return $form;
     }

+ 9 - 0
src/Form/Layout.php

@@ -40,6 +40,15 @@ class Layout
         $this->currentFields[] = $field;
     }
 
+    public function appendToLastColumn($content)
+    {
+        if ($end = end($this->columns)) {
+            foreach (is_array($content) ? $content : [$content] as $value) {
+                $end->append($value);
+            }
+        }
+    }
+
     public function hasBlocks()
     {
         return $this->hasBlock;