jqh 4 years ago
parent
commit
b46ea20191
2 changed files with 22 additions and 26 deletions
  1. 6 8
      src/Form/Builder.php
  2. 16 18
      src/Form/Field.php

+ 6 - 8
src/Form/Builder.php

@@ -807,17 +807,15 @@ class Builder
             $this->form->updatedAtColumn(),
         ];
 
-        $this->fields = $this->fields()->reject(function (Field $field) use (&$reservedColumns) {
+        $reject = function (Field $field) use (&$reservedColumns) {
             return in_array($field->column(), $reservedColumns)
                 && $field instanceof Form\Field\Display;
-        });
+        };
+
+        $this->fields = $this->fields()->reject($reject);
         
-        //移除tab中的ReservedFields
-        $this->form->getTab()->getTabs()->transform(function($item) use (&$reservedColumns) {
-            $item['fields'] = $item['fields']->reject(function (Field $field) use (&$reservedColumns) {
-                return in_array($field->column(), $reservedColumns)
-                    && $field instanceof Form\Field\Display;
-            });
+        $this->form->getTab()->getTabs()->transform(function($item) use ($reject) {
+            $item['fields'] = $item['fields']->reject($reject);
 
             return $item;
         });

+ 16 - 18
src/Form/Field.php

@@ -493,41 +493,39 @@ class Field implements Renderable
      */
     public function options($options = [])
     {
-        $this->options = $this->prepareOptions($options);
+        if ($options instanceof \Closure) {
+            $options = $options->call($this->data(), $this->value());
+        }
+
+        $this->options = array_merge($this->options, Helper::array($options));
 
         return $this;
     }
 
     /**
-     * @param array|Arrayable $options
+     * @param array $options
      *
      * @return $this
      */
-    public function mergeOptions($options)
+    public function replaceOptions($options)
     {
-        $this->options = array_merge($this->options, $this->prepareOptions($options));
+        if ($options instanceof \Closure) {
+            $options = $options->call($this->data(), $this->value());
+        }
+
+        $this->options = $options;
 
         return $this;
     }
 
     /**
-     * Prepare options.
-     *
-     * @param $options
+     * @param array|Arrayable $options
      *
-     * @return array|mixed
+     * @return $this
      */
-    protected function prepareOptions($options)
+    public function mergeOptions($options)
     {
-        if ($options instanceof \Closure) {
-            $options = $options->call($this->data(), $this->value());
-        }
-
-        if ($options instanceof Arrayable) {
-            $options = $options->toArray();
-        }
-
-        return $options;
+        return $this->options($options);
     }
 
     /**