Ver código fonte

支持Laravel Octane

jqh 4 anos atrás
pai
commit
5fa9195a92

+ 3 - 3
src/AdminServiceProvider.php

@@ -212,7 +212,7 @@ class AdminServiceProvider extends ServiceProvider
         }, true);
     }
 
-    protected function registerServices()
+    public function registerServices()
     {
         $this->app->singleton('admin.app', Application::class);
         $this->app->singleton('admin.asset', Asset::class);
@@ -235,12 +235,12 @@ class AdminServiceProvider extends ServiceProvider
         $this->app->singleton(ExceptionHandler::class, config('admin.exception_handler') ?: Handler::class);
     }
 
-    protected function registerExtensions()
+    public function registerExtensions()
     {
         Admin::extension()->register();
     }
 
-    protected function bootExtensions()
+    public function bootExtensions()
     {
         Admin::extension()->boot();
     }

+ 55 - 0
src/Octane/Listeners/FlushAdminState.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace Dcat\Admin\Octane\Listeners;
+
+use Dcat\Admin\AdminServiceProvider;
+use Illuminate\Container\Container;
+
+class FlushAdminState
+{
+    protected $adminServices = [
+        'admin.app',
+        'admin.asset',
+        'admin.color',
+        'admin.sections',
+        'admin.extend',
+        'admin.extend.update',
+        'admin.extend.version',
+        'admin.navbar',
+        'admin.menu',
+        'admin.context',
+        'admin.setting',
+        'admin.web-uploader',
+    ];
+
+    protected $app;
+
+    public function __construct(Container $container)
+    {
+        $this->app = $container;
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  mixed  $event
+     * @return void
+     */
+    public function handle($event): void
+    {
+        $provider = new AdminServiceProvider($this->app);
+
+        $this->forgetServiceInstances();
+
+        $provider->registerServices();
+        $provider->registerExtensions();
+        $provider->boot();
+    }
+
+    protected function forgetServiceInstances()
+    {
+        foreach ($this->adminServices as $service) {
+            $this->app->forgetInstance($service);
+        }
+    }
+}