Ver código fonte

修复list表单max和min验证规则无效问题

jqh 4 anos atrás
pai
commit
269ac10552

+ 5 - 5
resources/views/form/keyvalue.blade.php

@@ -6,7 +6,7 @@
         <span name="{{$name}}"></span>
         <input name="{{ $name }}[{{ \Dcat\Admin\Form\Field\KeyValue::DEFAULT_FLAG_NAME }}]" type="hidden" />
 
-        <error></error>
+        <div class="help-block with-errors"></div>
 
         <table class="table table-hover">
             <thead>
@@ -27,7 +27,7 @@
                     <td>
                         <div class="form-group {{ $errors->has($keysErrorKey) ? 'has-error' : '' }}">
                             <div class="col-sm-12">
-                                <error></error>
+                                <div class="help-block with-errors"></div>
                                 @if($errors->has($keysErrorKey))
                                     @foreach($errors->get($keysErrorKey) as $message)
                                         <label class="control-label" for="inputError"><i class="feather icon-x-circle"></i> {{$message}}</label><br/>
@@ -41,7 +41,7 @@
                     <td>
                         <div class="form-group {{ $errors->has($valsErrorKey) ? 'has-error' : '' }}">
                             <div class="col-sm-12">
-                                <error></error>
+                                <div class="help-block with-errors"></div>
                                 @if($errors->has($valsErrorKey))
                                     @foreach($errors->get($valsErrorKey) as $message)
                                         <label class="control-label" for="inputError"><i class="feather icon-x-circle"></i> {{$message}}</label><br/>
@@ -82,7 +82,7 @@
         <td>
             <div class="form-group  ">
                 <div class="col-sm-12">
-                    <error></error>
+                    <div class="help-block with-errors"></div>
                     <input name="{{ $name }}[keys][{key}]" class="form-control" required/>
                 </div>
             </div>
@@ -90,7 +90,7 @@
         <td>
             <div class="form-group  ">
                 <div class="col-sm-12">
-                    <error></error>
+                    <div class="help-block with-errors"></div>
                     <input name="{{ $name }}[values][{key}]" class="form-control" />
                 </div>
             </div>

+ 3 - 3
resources/views/form/listfield.blade.php

@@ -11,7 +11,7 @@
                 <label class="control-label" for="inputError"><i class="feather icon-x-circle"></i> {{$message}}</label><br/>
             @endforeach
         @endif
-        <error></error>
+        <div class="help-block with-errors"></div>
 
         <span name="{{$name}}"></span>
         <input name="{{ $name }}[values][{{ \Dcat\Admin\Form\Field\ListField::DEFAULT_FLAG_NAME }}]" type="hidden" />
@@ -29,7 +29,7 @@
                         <div class="form-group {{ $errors->has($itemErrorKey) ? 'has-error' : '' }}">
                             <div class="col-sm-12">
                                 <input name="{{ $name }}[values][{{ (int) $k }}]" value="{{ old("{$column}.values.{$k}", $v) }}" class="form-control" />
-                                <error></error>
+                                <div class="help-block with-errors"></div>
                                 @if($errors->has($itemErrorKey))
                                     @foreach($errors->get($itemErrorKey) as $message)
                                         <label class="control-label" for="inputError"><i class="feather icon-x-circle"></i> {{$message}}</label><br/>
@@ -67,7 +67,7 @@
             <div class="form-group">
                 <div class="col-sm-12">
                     <input name="{{ $name }}[values][{key}]" class="form-control" />
-                    <error></error>
+                    <div class="help-block with-errors"></div>
                 </div>
             </div>
         </td>

+ 6 - 4
src/Form.php

@@ -1225,7 +1225,7 @@ class Form implements Renderable
             }
 
             if (($validator instanceof Validator) && ! $validator->passes()) {
-                $failedValidators[] = $validator;
+                $failedValidators[] = [$field, $validator];
             }
         }
 
@@ -1273,7 +1273,7 @@ class Form implements Renderable
     /**
      * Merge validation messages from input validators.
      *
-     * @param \Illuminate\Validation\Validator[] $validators
+     * @param array $validators
      *
      * @return MessageBag
      */
@@ -1281,8 +1281,10 @@ class Form implements Renderable
     {
         $messageBag = new MessageBag();
 
-        foreach ($validators as $validator) {
-            $messageBag = $messageBag->merge($validator->messages());
+        foreach ($validators as $value) {
+            [$field, $validator] = $value;
+
+            $messageBag = $messageBag->merge($field->formatValidatorMessages($validator->messages()));
         }
 
         if ($this->validationMessages) {

+ 11 - 0
src/Form/Concerns/HasFieldValidator.php

@@ -6,6 +6,7 @@ use Dcat\Admin\Form;
 use Dcat\Admin\Support\Helper;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Validator;
+use Illuminate\Support\MessageBag;
 use Illuminate\Support\Str;
 
 /**
@@ -425,4 +426,14 @@ trait HasFieldValidator
 
         return $this->attribute("data-{$key}error", $error);
     }
+
+    /**
+     * @param MessageBag $messageBag
+     *
+     * @return MessageBag
+     */
+    public function formatValidatorMessages($messageBag)
+    {
+        return $messageBag;
+    }
 }

+ 20 - 2
src/Form/Field/ListField.php

@@ -6,6 +6,7 @@ use Dcat\Admin\Admin;
 use Dcat\Admin\Form\Field;
 use Dcat\Admin\Support\Helper;
 use Illuminate\Support\Arr;
+use Illuminate\Support\MessageBag;
 
 class ListField extends Field
 {
@@ -81,7 +82,11 @@ class ListField extends Field
         }
 
         $rules = $attributes = [];
-        if (! $fieldRules = $this->getRules()) {
+        if (
+            (! $fieldRules = $this->getRules())
+            && ! $this->max
+            && ! $this->min
+        ) {
             return false;
         }
 
@@ -89,7 +94,9 @@ class ListField extends Field
             return false;
         }
 
-        $rules["{$this->column}.values.*"] = $fieldRules;
+        if ($fieldRules) {
+            $rules["{$this->column}.values.*"] = $fieldRules;
+        }
         $attributes["{$this->column}.values.*"] = __('Value');
         $rules["{$this->column}.values"][] = 'array';
 
@@ -108,6 +115,17 @@ class ListField extends Field
         return validator($input, $rules, $this->getValidationMessages(), $attributes);
     }
 
+    public function formatValidatorMessages($messageBag)
+    {
+        $messages = new MessageBag();
+
+        foreach ($messageBag->toArray() as $column => $message) {
+            $messages->add($this->column, $message);
+        }
+
+        return $messages;
+    }
+
     protected function prepareValidatorInput(array $input)
     {
         Arr::forget($input, "{$this->column}.values.".static::DEFAULT_FLAG_NAME);