ソースを参照

优化接口基础

xaboy 6 年 前
コミット
99193b87af

+ 24 - 0
src/Contract/CustomComponentInterface.php

@@ -0,0 +1,24 @@
+<?php
+/**
+ * PHP表单生成器
+ *
+ * @package  FormBuilder
+ * @author   xaboy <xaboy2005@qq.com>
+ * @version  2.0
+ * @license  MIT
+ * @link     https://github.com/xaboy/form-builder
+ */
+
+namespace FormBuilder\Contract;
+
+
+interface CustomComponentInterface
+{
+
+    /**
+     * 获取组件的生成规则
+     *
+     * @return array
+     */
+    public function build();
+}

+ 2 - 7
src/Contract/FormComponentInterface.php

@@ -12,13 +12,8 @@
 namespace FormBuilder\Contract;
 
 
-interface FormComponentInterface
+interface FormComponentInterface extends CustomComponentInterface
 {
+    public function __construct($field, $title);
 
-    /**
-     * 获取组件的生成规则
-     *
-     * @return array
-     */
-    public function build();
 }

+ 18 - 0
src/Contract/StyleInterface.php

@@ -0,0 +1,18 @@
+<?php
+/**
+ * PHP表单生成器
+ *
+ * @package  FormBuilder
+ * @author   xaboy <xaboy2005@qq.com>
+ * @version  2.0
+ * @license  MIT
+ * @link     https://github.com/xaboy/form-builder
+ */
+
+namespace FormBuilder\Contract;
+
+
+interface StyleInterface
+{
+    public function getStyle();
+}

+ 2 - 2
src/Driver/CustomComponent.php

@@ -12,7 +12,7 @@
 namespace FormBuilder\Driver;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\CustomComponentInterface;
 use FormBuilder\Rule\BaseRule;
 use FormBuilder\Rule\ChildrenRule;
 use FormBuilder\Rule\EmitRule;
@@ -23,7 +23,7 @@ use FormBuilder\Rule\ValidateRule;
  * 自定义组件
  * Class CustomComponent
  */
-class CustomComponent implements FormComponentInterface
+class CustomComponent implements CustomComponentInterface
 {
     use BaseRule;
     use ChildrenRule;

+ 2 - 1
src/Driver/FormComponent.php

@@ -12,10 +12,11 @@
 namespace FormBuilder\Driver;
 
 
+use FormBuilder\Contract\FormComponentInterface;
 use FormBuilder\Contract\ValidateInterface;
 use FormBuilder\Rule\CallPropsRule;
 
-abstract class FormComponent extends CustomComponent
+abstract class FormComponent extends CustomComponent implements FormComponentInterface
 {
     use CallPropsRule;
 

+ 0 - 5
src/Driver/FormOptionsComponent.php

@@ -18,11 +18,6 @@ abstract class FormOptionsComponent extends FormComponent
 {
     use OptionsRule;
 
-    public function __construct($field, $title, $value = null)
-    {
-        parent::__construct($field, $title, $value);
-    }
-
     public function build()
     {
         $rule = parent::build();

+ 1 - 1
src/Form.php

@@ -287,7 +287,7 @@ class Form
 
     protected function parseFormComponent($rule)
     {
-        if ($rule instanceof FormComponentInterface) {
+        if (Util::isComponent($rule)) {
             $rule = $rule->build();
         }
         return $rule;

+ 2 - 1
src/Rule/ChildrenRule.php

@@ -13,6 +13,7 @@ namespace FormBuilder\Rule;
 
 
 use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Util;
 
 trait ChildrenRule
 {
@@ -82,7 +83,7 @@ trait ChildrenRule
 
     protected function parseChildren($child)
     {
-        return $child instanceof FormComponentInterface ? $child->build() : $child;
+        return Util::isComponent($child) ? $child->build() : $child;
     }
 
     /**

+ 4 - 4
src/UI/Elm/Components/TreeData.php

@@ -12,7 +12,7 @@
 namespace FormBuilder\UI\Elm\Components;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\OptionComponentInterface;
 use FormBuilder\Rule\CallPropsRule;
 
 /**
@@ -26,7 +26,7 @@ use FormBuilder\Rule\CallPropsRule;
  * @method $this selected(bool $bool) 是否选中子节点
  * @method $this checked(bool $bool) 是否勾选(如果勾选,子节点也会全部勾选)
  */
-class TreeData implements FormComponentInterface
+class TreeData implements OptionComponentInterface
 {
     use CallPropsRule;
 
@@ -90,12 +90,12 @@ class TreeData implements FormComponentInterface
     /**
      * @return array
      */
-    public function build()
+    public function getOption()
     {
         $children = [];
         foreach ($this->children as $child) {
             $children[] = $child instanceof TreeData
-                ? $child->build()
+                ? $child->getOption()
                 : $child;
         }
         $this->props['children'] = $children;

+ 2 - 2
src/UI/Elm/Config.php

@@ -179,9 +179,9 @@ class Config implements ConfigInterface
     {
         $config = $this->config;
         if (isset($config['form']) && ($form = $config['form']) instanceof FormStyle)
-            $config['form'] = $form->build();
+            $config['form'] = $form->getStyle();
         if (isset($config['row']) && ($row = $config['row']) instanceof Row)
-            $config['row'] = $row->build();
+            $config['row'] = $row->getStyle();
         if (isset($config['submitBtn']) && ($submitBtn = $config['submitBtn']) instanceof Button)
             $config['submitBtn'] = $this->parseButton($submitBtn);
         if (isset($config['resetBtn']) && ($resetBtn = $config['resetBtn']) instanceof Button)

+ 3 - 3
src/UI/Elm/Style/FormStyle.php

@@ -12,7 +12,7 @@
 namespace FormBuilder\UI\Elm\Style;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\StyleInterface;
 use FormBuilder\Rule\CallPropsRule;
 
 /**
@@ -31,7 +31,7 @@ use FormBuilder\Rule\CallPropsRule;
  * @method $this size(string $size) 用于控制该表单内组件的尺寸, 可选值: medium / small / mini
  * @method $this disabled(bool $disabled) 是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效, 默认值: false
  */
-class FormStyle implements FormComponentInterface
+class FormStyle implements StyleInterface
 {
     use CallPropsRule;
 
@@ -66,7 +66,7 @@ class FormStyle implements FormComponentInterface
     /**
      * @return object
      */
-    public function build()
+    public function getStyle()
     {
         return (object)$this->props;
     }

+ 3 - 3
src/UI/Elm/Style/Row.php

@@ -12,14 +12,14 @@
 namespace FormBuilder\UI\Elm\Style;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\StyleInterface;
 
 /**
  * row栅格规则
  *
  * Class Row
  */
-class Row implements FormComponentInterface
+class Row implements StyleInterface
 {
     protected $rule;
 
@@ -81,7 +81,7 @@ class Row implements FormComponentInterface
     /**
      * @return object
      */
-    public function build()
+    public function getStyle()
     {
         return (object)$this->rule;
     }

+ 1 - 1
src/UI/Iview/Components/Tree.php

@@ -60,7 +60,7 @@ class Tree extends FormComponent
         $this->props['data'] = [];
         foreach ($treeData as $child) {
             $this->props['data'][] = $child instanceof TreeData
-                ? $child->build()
+                ? $child->getOption()
                 : $child;
         }
         return $this;

+ 3 - 3
src/UI/Iview/Components/TreeData.php

@@ -12,7 +12,7 @@
 namespace FormBuilder\UI\Iview\Components;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\OptionComponentInterface;
 use FormBuilder\Rule\CallPropsRule;
 
 /**
@@ -26,7 +26,7 @@ use FormBuilder\Rule\CallPropsRule;
  * @method $this selected(bool $bool) 是否选中子节点
  * @method $this checked(bool $bool) 是否勾选(如果勾选,子节点也会全部勾选)
  */
-class TreeData implements FormComponentInterface
+class TreeData implements OptionComponentInterface
 {
     use CallPropsRule;
 
@@ -90,7 +90,7 @@ class TreeData implements FormComponentInterface
     /**
      * @return array
      */
-    public function build()
+    public function getOption()
     {
         $children = [];
         foreach ($this->children as $child) {

+ 2 - 2
src/UI/Iview/Config.php

@@ -179,9 +179,9 @@ class Config implements ConfigInterface
     {
         $config = $this->config;
         if (isset($config['form']) && ($form = $config['form']) instanceof FormStyle)
-            $config['form'] = $form->build();
+            $config['form'] = $form->getStyle();
         if (isset($config['row']) && ($row = $config['row']) instanceof Row)
-            $config['row'] = $row->build();
+            $config['row'] = $row->getStyle();
         if (isset($config['submitBtn']) && ($submitBtn = $config['submitBtn']) instanceof Button)
             $config['submitBtn'] = $this->parseButton($submitBtn);
         if (isset($config['resetBtn']) && ($resetBtn = $config['resetBtn']) instanceof Button)

+ 3 - 4
src/UI/Iview/Style/FormStyle.php

@@ -12,14 +12,13 @@
 namespace FormBuilder\UI\Iview\Style;
 
 
-use FormBuilder\Contract\FormComponentInterface;
-use FormBuilder\Rule\CallPropsRule;
+use FormBuilder\Contract\StyleInterface;
 
 /**
  * form表单样式
  * Class FormStyle
  */
-class FormStyle implements FormComponentInterface
+class FormStyle implements StyleInterface
 {
     /**
      * @var array
@@ -98,7 +97,7 @@ class FormStyle implements FormComponentInterface
     /**
      * @return object
      */
-    public function build()
+    public function getStyle()
     {
         return (object)$this->rule;
     }

+ 3 - 3
src/UI/Iview/Style/Row.php

@@ -12,14 +12,14 @@
 namespace FormBuilder\UI\Iview\Style;
 
 
-use FormBuilder\Contract\FormComponentInterface;
+use FormBuilder\Contract\StyleInterface;
 
 /**
  * row栅格规则
  *
  * Class Row
  */
-class Row implements FormComponentInterface
+class Row implements StyleInterface
 {
     protected $rule;
 
@@ -81,7 +81,7 @@ class Row implements FormComponentInterface
     /**
      * @return object
      */
-    public function build()
+    public function getStyle()
     {
         return (object)$this->rule;
     }

+ 24 - 0
src/Util.php

@@ -0,0 +1,24 @@
+<?php
+/**
+ * PHP表单生成器
+ *
+ * @package  FormBuilder
+ * @author   xaboy <xaboy2005@qq.com>
+ * @version  2.0
+ * @license  MIT
+ * @link     https://github.com/xaboy/form-builder
+ */
+
+namespace FormBuilder;
+
+
+use FormBuilder\Contract\CustomComponentInterface;
+use FormBuilder\Contract\FormComponentInterface;
+
+class Util
+{
+    public static function isComponent($component)
+    {
+        return $component instanceof CustomComponentInterface || $component instanceof FormComponentInterface;
+    }
+}