소스 검색

减少对静态属性的依赖

jqh 5 년 전
부모
커밋
eb72805ce0
8개의 변경된 파일86개의 추가작업 그리고 89개의 파일을 삭제
  1. 1 0
      resources/lang/en/admin.php
  2. 10 32
      src/Admin.php
  3. 15 3
      src/AdminServiceProvider.php
  4. 15 15
      src/Form/Concerns/Events.php
  5. 0 12
      src/Layout/Navbar.php
  6. 2 2
      src/Middleware/Bootstrap.php
  7. 16 10
      src/Support/helpers.php
  8. 27 15
      src/Traits/BuilderEvents.php

+ 1 - 0
resources/lang/en/admin.php

@@ -44,6 +44,7 @@ return [
     'username'              => 'Username',
     'user'                  => 'User',
     'alias'                 => 'Alias',
+    'routes'                => 'Routes',
     'route_action'          => 'Route Action',
     'middleware'            => 'Middleware',
     'method'                => 'Method',

+ 10 - 32
src/Admin.php

@@ -19,6 +19,8 @@ use Illuminate\Contracts\Auth\Guard;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Event;
+use phpDocumentor\Reflection\Types\Mixed_;
 
 /**
  * Class Admin.
@@ -34,11 +36,6 @@ class Admin
      */
     const VERSION = '1.0.0';
 
-    /**
-     * @var Navbar
-     */
-    protected static $navbar;
-
     /**
      * @var string
      */
@@ -54,21 +51,6 @@ class Admin
      */
     protected static $availableExtensions;
 
-    /**
-     * @var Menu
-     */
-    protected static $menu;
-
-    /**
-     * @var []Closure
-     */
-    protected static $booting = [];
-
-    /**
-     * @var []Closure
-     */
-    protected static $booted = [];
-
     /**
      * Returns the long version of dcat-admin.
      *
@@ -87,7 +69,7 @@ class Admin
      */
     public static function menu(Closure $builder = null)
     {
-        $menu = static::$menu ?: (static::$menu = new Menu);
+        $menu = app('admin.menu');
 
         $builder && $builder($menu);
 
@@ -143,7 +125,7 @@ class Admin
      */
     public static function navbar(Closure $builder = null)
     {
-        $navbar = Navbar::make();
+        $navbar = app('admin.navbar');
 
         $builder && $builder($navbar);
 
@@ -363,17 +345,17 @@ class Admin
     /**
      * @param callable $callback
      */
-    public static function booting(callable $callback)
+    public static function booting($callback)
     {
-        static::$booting[] = $callback;
+        Event::listen('admin.booting', $callback);
     }
 
     /**
      * @param callable $callback
      */
-    public static function booted(callable $callback)
+    public static function booted($callback)
     {
-        static::$booted[] = $callback;
+        Event::listen('admin.booted', $callback);
     }
 
     /**
@@ -381,9 +363,7 @@ class Admin
      */
     public static function callBooting()
     {
-        foreach (static::$booting as $call) {
-            call_user_func($call);
-        }
+        Event::dispatch('admin.booting');
     }
 
     /**
@@ -391,9 +371,7 @@ class Admin
      */
     public static function callBooted()
     {
-        foreach (static::$booted as $call) {
-            call_user_func($call);
-        }
+        Event::dispatch('admin.booted');
     }
 
 }

+ 15 - 3
src/AdminServiceProvider.php

@@ -3,10 +3,13 @@
 namespace Dcat\Admin;
 
 use Dcat\Admin\Layout\Content;
+use Dcat\Admin\Layout\Menu;
+use Dcat\Admin\Layout\Navbar;
 use Dcat\Admin\Layout\SectionManager;
 use Illuminate\Foundation\AliasLoader;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Blade;
+use Illuminate\Support\Fluent;
 use Illuminate\Support\ServiceProvider;
 
 class AdminServiceProvider extends ServiceProvider
@@ -64,6 +67,7 @@ class AdminServiceProvider extends ServiceProvider
      */
     public function boot()
     {
+        $this->registerDefaultSections();
         $this->registerViews();
         $this->ensureHttps();
         $this->registerRoutes();
@@ -83,8 +87,7 @@ class AdminServiceProvider extends ServiceProvider
         $this->registerExtensionProviders();
         $this->loadAdminAuthConfig();
         $this->registerRouteMiddleware();
-        $this->registerService();
-        $this->registerDefaultSections();
+        $this->registerServices();
 
         $this->commands($this->commands);
     }
@@ -190,9 +193,18 @@ class AdminServiceProvider extends ServiceProvider
         }, true);
     }
 
-    protected function registerService()
+    /**
+     * Register admin services
+     */
+    protected function registerServices()
     {
         $this->app->singleton('sectionManager', SectionManager::class);
+
+        $this->app->singleton('admin.navbar', Navbar::class);
+
+        $this->app->singleton('admin.menu', Menu::class);
+
+        $this->app->singleton('admin.object', Fluent::class);
     }
 
     /**

+ 15 - 15
src/Form/Concerns/Events.php

@@ -11,14 +11,14 @@ trait Events
     /**
      * @var array
      */
-    protected $_listeners = [
-        'creating' => [],
-        'editing' => [],
+    protected $hooks = [
+        'creating'  => [],
+        'editing'   => [],
         'submitted' => [],
-        'saving' => [],
-        'saved' => [],
-        'deleting' => [],
-        'deleted' => [],
+        'saving'    => [],
+        'saved'     => [],
+        'deleting'  => [],
+        'deleted'   => [],
     ];
 
     /**
@@ -30,7 +30,7 @@ trait Events
      */
     public function creating(Closure $callback)
     {
-        $this->_listeners['creating'][] = $callback;
+        $this->hooks['creating'][] = $callback;
     }
 
     /**
@@ -42,7 +42,7 @@ trait Events
      */
     public function editing(Closure $callback)
     {
-        $this->_listeners['editing'][] = $callback;
+        $this->hooks['editing'][] = $callback;
     }
 
     /**
@@ -54,7 +54,7 @@ trait Events
      */
     public function submitted(Closure $callback)
     {
-        $this->_listeners['submitted'][] = $callback;
+        $this->hooks['submitted'][] = $callback;
     }
 
     /**
@@ -66,7 +66,7 @@ trait Events
      */
     public function saving(Closure $callback)
     {
-        $this->_listeners['saving'][] = $callback;
+        $this->hooks['saving'][] = $callback;
     }
 
     /**
@@ -78,7 +78,7 @@ trait Events
      */
     public function saved(Closure $callback)
     {
-        $this->_listeners['saved'][] = $callback;
+        $this->hooks['saved'][] = $callback;
     }
 
     /**
@@ -88,7 +88,7 @@ trait Events
      */
     public function deleting(Closure $callback)
     {
-        $this->_listeners['deleting'][] = $callback;
+        $this->hooks['deleting'][] = $callback;
     }
 
     /**
@@ -98,7 +98,7 @@ trait Events
      */
     public function deleted(Closure $callback)
     {
-        $this->_listeners['deleted'][] = $callback;
+        $this->hooks['deleted'][] = $callback;
     }
 
     /**
@@ -173,7 +173,7 @@ trait Events
      */
     protected function callListeners($name)
     {
-        foreach ($this->_listeners[$name] as $func) {
+        foreach ($this->hooks[$name] as $func) {
             $this->model && $func->bindTo($this->model);
 
             if (($ret = $func($this)) instanceof Response) {

+ 0 - 12
src/Layout/Navbar.php

@@ -10,11 +10,6 @@ class Navbar implements Renderable
 {
     use BuilderEvents;
 
-    /**
-     * @var static
-     */
-    protected static $instance;
-
     /**
      * @var array
      */
@@ -83,11 +78,4 @@ class Navbar implements Renderable
         })->implode('');
     }
 
-    /**
-     * @return static
-     */
-    public static function make()
-    {
-        return static::$instance ?: (static::$instance = new static);
-    }
 }

+ 2 - 2
src/Middleware/Bootstrap.php

@@ -17,12 +17,12 @@ class Bootstrap
 
         Admin::callBooting();
 
-        Admin::callBooted();
-
         if (config('admin.cdn')) {
             Admin::cdn();
         }
 
+        Admin::callBooted();
+
         return $next($request);
     }
 

+ 16 - 10
src/Support/helpers.php

@@ -183,9 +183,11 @@ if (!function_exists('admin_controller_slug')) {
      */
     function admin_controller_slug()
     {
-        static $slug;
+        static $slug = [];
 
-        return $slug ?: ($slug = \Dcat\Admin\Support\Helper::slug(admin_controller_name()));
+        $controller = admin_controller_name();
+
+        return $slug[$controller] ?? ($slug[$controller] = \Dcat\Admin\Support\Helper::slug($controller));
     }
 }
 
@@ -197,18 +199,22 @@ if (!function_exists('admin_controller_name')) {
      */
     function admin_controller_name()
     {
-        static $name;
+        static $name = [];
 
-        if (!$name) {
-            if (!app('router')->current()) {
-                return $name = 'undefined';
-            }
+        $router = app('router');
+
+        if (! $router->current()) {
+            return 'undefined';
+        }
+
+        $actionName = $router->current()->getActionName();
 
-            $controller = class_basename(explode('@', app('router')->current()->getActionName())[0]);
+        if (! isset($name[$actionName])) {
+            $controller = class_basename(explode('@', $actionName)[0]);
 
-            $name = str_replace('Controller', '', $controller);
+            $name[$actionName] = str_replace('Controller', '', $controller);
         }
-        return $name;
+        return $name[$actionName];
     }
 }
 

+ 27 - 15
src/Traits/BuilderEvents.php

@@ -4,16 +4,6 @@ namespace Dcat\Admin\Traits;
 
 trait BuilderEvents
 {
-    /**
-     * @var callable
-     */
-    protected static $resolvingListneners = [];
-
-    /**
-     * @var callable
-     */
-    protected static $composerListneners = [];
-
     /**
      * Register a resolving listener.
      *
@@ -22,7 +12,7 @@ trait BuilderEvents
      */
     public static function resolving(callable $callback, bool $once = false)
     {
-        static::$resolvingListneners[] = [$callback, $once];
+        static::setListeners('builder.resolving', $callback, $once);
     }
 
     /**
@@ -30,7 +20,7 @@ trait BuilderEvents
      */
     protected function callResolving(...$params)
     {
-        $this->callBuilderListeners(static::$resolvingListneners, ...$params);
+        $this->callBuilderListeners('builder.resolving', ...$params);
     }
 
     /**
@@ -41,7 +31,7 @@ trait BuilderEvents
      */
     public static function composing(callable $callback, bool $once = false)
     {
-        static::$composerListneners[] = [$callback, $once];
+        static::setListeners('builder.composing', $callback, $once);
     }
 
     /**
@@ -49,15 +39,19 @@ trait BuilderEvents
      */
     protected function callComposing(...$params)
     {
-        $this->callBuilderListeners(static::$composerListneners, ...$params);
+        $this->callBuilderListeners('builder.composing', ...$params);
     }
 
     /**
      * @param $listeners
      * @param array ...$params
      */
-    protected function callBuilderListeners(&$listeners, ...$params)
+    protected function callBuilderListeners($key, ...$params)
     {
+        $object = app('admin.object');
+
+        $listeners = $object->get($key) ?: [];
+
         foreach ($listeners as $k => $listener) {
             list($callback, $once) = $listener;
 
@@ -67,6 +61,24 @@ trait BuilderEvents
 
             call_user_func($callback, $this, ...$params);
         }
+
+        $object[$key] = $listeners;
+    }
+
+    /**
+     * @param string $key
+     * @param callable $callback
+     * @param bool $once
+     */
+    protected static function setListeners($key, $callback, $once)
+    {
+        $object = app('admin.object');
+
+        $listeners = $object->get($key) ?: [];
+
+        $listeners[] = [$callback, $once];
+
+        $object[$key] = $listeners;
     }
 
 }