jqh 5 éve
szülő
commit
cfce1c38ee
5 módosított fájl, 51 hozzáadás és 43 törlés
  1. 37 30
      src/Form.php
  2. 9 9
      src/Form/Field.php
  3. 3 3
      src/Grid/Model.php
  4. 1 1
      src/Grid/Tools/Selector.php
  5. 1 0
      src/Widgets/Form.php

+ 37 - 30
src/Form.php

@@ -13,6 +13,7 @@ use Dcat\Admin\Traits\HasBuilderEvents;
 use Dcat\Admin\Widgets\ModalForm;
 use Illuminate\Contracts\Support\MessageProvider;
 use Illuminate\Contracts\Support\Renderable;
+use Illuminate\Http\Request;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Fluent;
 use Illuminate\Support\MessageBag;
@@ -183,6 +184,11 @@ class Form implements Renderable
      */
     protected $callback;
 
+    /**
+     * @var Request
+     */
+    protected $request;
+
     /**
      * @var bool
      */
@@ -266,14 +272,12 @@ class Form implements Renderable
      * @param Repository $model
      * @param \Closure $callback
      */
-    public function __construct(Repository $repository, ?Closure $callback = null)
+    public function __construct(Repository $repository, ?Closure $callback = null, Request $request = null)
     {
         $this->repository = Admin::repository($repository);
-
         $this->callback = $callback;
-
+        $this->request = $request ?: request();
         $this->builder = new Builder($this);
-
         $this->isSoftDeletes = $this->repository->isSoftDeletes();
 
         $this->setModel(new Fluent());
@@ -560,11 +564,11 @@ class Form implements Renderable
      *
      * @param array|null $data
      * @param string|string $redirectTo
-     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\Http\JsonResponse
+     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\Http\JsonResponse|Response
      */
     public function store(?array $data = null, $redirectTo = null)
     {
-        $data = $data ?: request()->all();
+        $data = $data ?: $this->request->all();
 
         $this->build();
 
@@ -585,11 +589,7 @@ class Form implements Renderable
 
         // Handle validation errors.
         if ($validationMessages = $this->validationMessages($data)) {
-            if (!$this->isAjaxRequest()) {
-                return back()->withInput()->withErrors($validationMessages);
-            } else {
-                return response()->json(['errors' => $validationMessages->getMessages()], 422);
-            }
+            return $this->makeValidationErrorsResponse($validationMessages);
         }
 
         if (($response = $this->prepare($data))) {
@@ -642,9 +642,7 @@ class Form implements Renderable
      */
     public function isAjaxRequest()
     {
-        $request = request();
-
-        return $request->ajax() && !$request->pjax();
+        return $this->request->ajax() && ! $this->request->pjax();
     }
 
     /**
@@ -708,7 +706,7 @@ class Form implements Renderable
      * @param int   $id
      * @param array $input
      *
-     * @return bool
+     * @return bool||Response
      */
     protected function handleOrderable(array $input = [])
     {
@@ -726,7 +724,7 @@ class Form implements Renderable
      * @param $id
      * @param array|null $data
      * @param string|null $redirectTo
-     * @return $this|bool|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|mixed|null
+     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse||Response
      */
     public function update(
         $id,
@@ -734,7 +732,7 @@ class Form implements Renderable
         $redirectTo = null
     )
     {
-        $data = $data ?: request()->all();
+        $data = $data ?: $this->request->all();
 
         $this->builder->setResourceId($id);
         $this->builder->setMode(Builder::MODE_EDIT);
@@ -764,13 +762,9 @@ class Form implements Renderable
 
         // Handle validation errors.
         if ($validationMessages = $this->validationMessages($data)) {
-            if (!$isEditable && !$this->isAjaxRequest()) {
-                return back()->withInput()->withErrors($validationMessages);
-            } else {
-                return response()->json([
-                    'errors' => $isEditable ? Arr::dot($validationMessages->getMessages()) : $validationMessages->getMessages()
-                ], 422);
-            }
+            return $this->makeValidationErrorsResponse(
+                $isEditable ? Arr::dot($validationMessages->toArray()) : $validationMessages
+            );
         }
 
         if (($response = $this->prepare($data))) {
@@ -791,6 +785,21 @@ class Form implements Renderable
         );
     }
 
+    /**
+     * @param array|MessageBag $validationMessages
+     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
+     */
+    protected function makeValidationErrorsResponse($validationMessages)
+    {
+        if (! $this->isAjaxRequest()) {
+            return back()->withInput()->withErrors($validationMessages);
+        }
+
+        return response()->json([
+            'errors' => is_array($validationMessages) ? $validationMessages : $validationMessages->getMessages()
+        ], 422);
+    }
+
     /**
      * Get redirect response.
      *
@@ -809,14 +818,12 @@ class Form implements Renderable
 
         $status = (bool) ($options['status'] ?? true);
 
-        // 判断是否是ajax请求
         if ($this->isAjaxRequest()) {
             $message = $message ?: trans('admin.save_succeeded');
 
             return $this->ajaxResponse($message, $url, $status);
         }
 
-        // 非ajax请求
         $status = (int) ($options['status_code'] ?? 302);
 
         if ($message) {
@@ -839,23 +846,23 @@ class Form implements Renderable
         $resourcesPath = $this->builder->isCreating() ?
             $this->getResource(0) : $this->getResource(-1);
 
-        if (request('after-save') == 1) {
+        if ($this->request->get('after-save') == 1) {
             // continue editing
             if ($this->builder->isEditing() && $this->isAjaxRequest()) {
                 return false;
             }
             return rtrim($resourcesPath, '/')."/{$key}/edit";
         }
-        if (request('after-save') == 2) {
+        if ($this->request->get('after-save') == 2) {
             // continue creating
             return rtrim($resourcesPath, '/').'/create';
         }
-        if (request('after-save') == 3) {
+        if ($this->request->get('after-save') == 3) {
             // view resource
             return rtrim($resourcesPath, '/')."/{$key}";
         }
 
-        return request(Builder::PREVIOUS_URL_KEY) ?: $resourcesPath;
+        return $this->request->get(Builder::PREVIOUS_URL_KEY) ?: $resourcesPath;
     }
 
     /**

+ 9 - 9
src/Form/Field.php

@@ -947,11 +947,9 @@ class Field implements Renderable
      */
     public function addElementClass($class)
     {
-        if (is_array($class) || is_string($class)) {
-            $this->elementClass = array_merge($this->elementClass, (array) $class);
-
-            $this->elementClass = array_unique($this->elementClass);
-        }
+        $this->elementClass = array_unique(
+            array_merge($this->elementClass, (array) $class)
+        );
 
         return $this;
     }
@@ -1003,13 +1001,15 @@ class Field implements Renderable
     }
 
     /**
-     * @param array $labelClass
-     *
+     * @param array|string $labelClass
+     * @param bool $append
      * @return $this
      */
-    public function setLabelClass(array $labelClass)
+    public function setLabelClass($labelClass, bool $append = true)
     {
-        $this->labelClass = $labelClass;
+        $this->labelClass = $append
+            ? array_unique(array_merge($this->labelClass, (array) $labelClass))
+            : (array) $labelClass;
 
         return $this;
     }

+ 3 - 3
src/Grid/Model.php

@@ -464,7 +464,7 @@ class Model
             return null;
         }
 
-        return $this->currentPage ?: ($this->currentPage = ($this->request->input($this->pageName) ?: 1));
+        return $this->currentPage ?: ($this->currentPage = ($this->request->get($this->pageName) ?: 1));
     }
 
     /**
@@ -488,7 +488,7 @@ class Model
             return null;
         }
 
-        return $this->request->input($this->perPageName) ?: $this->perPage;
+        return $this->request->get($this->perPageName) ?: $this->perPage;
     }
 
     /**
@@ -576,7 +576,7 @@ class Model
      */
     protected function setSort()
     {
-        $this->sort = $this->request->input($this->sortName, []);
+        $this->sort = $this->request->get($this->sortName, []);
 
         if (empty($this->sort['column']) || empty($this->sort['type'])) {
             return;

+ 1 - 1
src/Grid/Tools/Selector.php

@@ -118,7 +118,7 @@ class Selector
             return $this->selected;
         }
 
-        $selected = $this->request->input($this->queryName, []);
+        $selected = $this->request->get($this->queryName, []);
         if (! is_array($selected)) {
             return [];
         }

+ 1 - 0
src/Widgets/Form.php

@@ -66,6 +66,7 @@ use Illuminate\Support\Str;
  * @method Field\ListField      list($column, $label = '')
  * @method Field\Timezone       timezone($column, $label = '')
  * @method Field\KeyValue       keyValue($column, $label = '')
+ * @method Field\Tel            tel($column, $label = '')
  *
  * @method Field\BootstrapFile          bootstrapFile($column, $label = '')
  * @method Field\BootstrapImage         bootstrapImage($column, $label = '')