Ver Fonte

静态资源路径别名应用

jqh há 5 anos atrás
pai
commit
2217180ab4

+ 0 - 1
src/Admin.php

@@ -261,7 +261,6 @@ class Admin
             $router->get('helpers/icons', 'Dcat\Admin\Controllers\IconController@index');
             $router->resource('helpers/extensions', 'Dcat\Admin\Controllers\ExtensionController', ['only' => ['index', 'store', 'update']]);
             $router->post('helpers/extensions/import', 'Dcat\Admin\Controllers\ExtensionController@import');
-            $router->post('helpers/extensions/create', 'Dcat\Admin\Controllers\ExtensionController@create');
         });
     }
 

+ 1 - 1
src/AdminServiceProvider.php

@@ -152,7 +152,7 @@ class AdminServiceProvider extends ServiceProvider
             $this->publishes([__DIR__.'/../config' => config_path()], 'dcat-admin-config');
             $this->publishes([__DIR__.'/../resources/lang' => resource_path('lang')], 'dcat-admin-lang');
             $this->publishes([__DIR__.'/../database/migrations' => database_path('migrations')], 'dcat-admin-migrations');
-            $this->publishes([__DIR__.'/../resources/assets/dist' => public_path('dcat-admin')], 'dcat-admin-assets');
+            $this->publishes([__DIR__.'/../resources/assets/dist' => public_path(Admin::assets()->getRealPath('@admin'))], 'dcat-admin-assets');
         }
     }
 

+ 9 - 3
src/Console/AssetsLinkCommand.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Console;
 
+use Dcat\Admin\Admin;
 use Illuminate\Console\Command;
 
 class AssetsLinkCommand extends Command
@@ -20,10 +21,15 @@ class AssetsLinkCommand extends Command
      */
     public function handle()
     {
-        $publicPath = base_path('public/dcat-admin');
+        $basePath = Admin::assets()->getRealPath('@admin');
+        $publicPath = public_path($basePath);
+
+        if (! is_dir($publicPath.'/..')) {
+            app('files')->makeDirectory($publicPath.'/..', 0755, true, true);
+        }
 
         if (file_exists(public_path($publicPath))) {
-            return $this->error('The "public/dcat-admin" directory already exists.');
+            return $this->error("The \"{$basePath}\" directory already exists.");
         }
 
         $distPath = realpath(__DIR__.'/../../resources/dist');
@@ -32,6 +38,6 @@ class AssetsLinkCommand extends Command
             $distPath, $publicPath
         );
 
-        $this->info('The [public/dcat-admin] directory has been linked.');
+        $this->info("The [$basePath] directory has been linked.");
     }
 }

+ 1 - 7
src/Console/ExtendCommand.php

@@ -74,13 +74,7 @@ class ExtendCommand extends Command
     {
         $this->filesystem = $filesystem;
 
-        $this->extensionDir = config('admin.extension_dir');
-
-        InputExtensionDir:
-        if (empty($this->extensionDir)) {
-            $this->extensionDir = $this->ask('Please input a directory to store your extension:');
-//            goto InputExtensionDir;
-        }
+        $this->extensionDir = config('admin.extension_dir') ?: app_path('Admin/Extensions');
 
         if (! file_exists($this->extensionDir)) {
             $this->makeDir();

+ 6 - 1
src/Console/ImportCommand.php

@@ -69,7 +69,12 @@ class ImportCommand extends VendorPublishCommand
             ($assets = $extension->assets())
             && file_exists($assets)
         ) {
-            $this->publishItem($assets, public_path('vendor/dcat-admin-extensions/'.$extension::NAME));
+            $this->publishItem(
+                $assets,
+                public_path(
+                    Admin::assets()->getRealPath('@extension').'/'.$extension::NAME
+                )
+            );
         }
     }
 

+ 2 - 1
src/Console/InstallCommand.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Console;
 
+use Dcat\Admin\Models\AdminTablesSeeder;
 use Illuminate\Console\Command;
 
 class InstallCommand extends Command
@@ -53,7 +54,7 @@ class InstallCommand extends Command
         $userModel = config('admin.database.users_model');
 
         if ($userModel::count() == 0) {
-            $this->call('db:seed', ['--class' => \Dcat\Admin\Models\AdminTablesSeeder::class]);
+            $this->call('db:seed', ['--class' => AdminTablesSeeder::class]);
         }
     }
 

+ 3 - 1
src/Console/UninstallCommand.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Console;
 
+use Dcat\Admin\Admin;
 use Illuminate\Console\Command;
 
 class UninstallCommand extends Command
@@ -44,7 +45,8 @@ class UninstallCommand extends Command
     protected function removeFilesAndDirectories()
     {
         $this->laravel['files']->deleteDirectory(config('admin.directory'));
-        $this->laravel['files']->deleteDirectory(public_path('vendor/dcat-admin/'));
+        $this->laravel['files']->deleteDirectory(public_path(Admin::assets()->getRealPath('@extension')));
+        $this->laravel['files']->deleteDirectory(public_path(Admin::assets()->getRealPath('@admin')));
         $this->laravel['files']->delete(config_path('admin.php'));
     }
 }

+ 0 - 3
src/Console/stubs/extension/composer.json.stub

@@ -15,9 +15,6 @@
         "php": ">=7.1.0",
         "dcat/laravel-admin": "*"
     },
-    "require-dev": {
-        "phpunit/phpunit": "~6.0"
-    },
     "autoload": {
         "psr-4": {
             ":namespace": "src/"

+ 56 - 27
src/Controllers/ExtensionController.php

@@ -7,10 +7,12 @@ use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\Models\Repositories\Extension;
+use Dcat\Admin\Support\StringOutput;
 use Dcat\Admin\Widgets\Box;
 use Dcat\Admin\Widgets\Table;
 use Dcat\Admin\Widgets\Terminal;
 use Illuminate\Routing\Controller;
+use Illuminate\Support\Facades\Artisan;
 
 class ExtensionController extends Controller
 {
@@ -53,28 +55,6 @@ class ExtensionController extends Controller
         return response()->json(['status' => true, 'content' => $box->render()]);
     }
 
-    /**
-     * @return \Illuminate\Http\JsonResponse
-     */
-    public function create()
-    {
-        $name = request('name');
-        $namespace = trim(request('namespace'), '\\');
-        $contents = "<span>admin:extend <small>$name --namespace=$namespace</small></span>";
-        $terminal = Terminal::call('admin:extend', [
-            'extension' => $name,
-            '--namespace' => $namespace,
-        ]);
-
-        $box = Box::make($contents)
-            ->content($terminal)
-            ->style('default')
-            ->collapsable()
-            ->removable();
-
-        return response()->json(['status' => true, 'content' => $box->render()]);
-    }
-
     /**
      * Make a grid builder.
      *
@@ -142,7 +122,7 @@ class ExtensionController extends Controller
             $create->text('namespace')
                 ->attribute('style', 'width:240px')
                 ->required()
-                ->default('Dcat\\\\Admin\\\\Extension\\\\Your name');
+                ->default('Dcat\\Admin\\Extension\\:Name');
         });
 
         return $grid;
@@ -157,17 +137,66 @@ class ExtensionController extends Controller
     {
         $form = new Form(new Extension());
 
-        $form->text('package_name')->required();
+        $self = $this;
+
+        $form->text('package_name')->rules(function () use ($self) {
+            return [
+                'required',
+                function ($attribute, $value, $fail) use ($self) {
+                    if (! $self->validateExtensionName($value)) {
+                        return $fail(
+                            "[$value] is not a valid package name, please input a name like \"vendor/name\""
+                        );
+                    }
+                },
+            ];
+        });
         $form->text('namespace')->required();
         $form->hidden('enable');
 
-        $form->submitted(function () {
+        $form->saving(function (Form $form) {
+            $package = $form->package_name;
+            $namespace = $form->namespace;
 
+            $results = $this->createExtension($package, $namespace);
+
+            return $form->success($results);
         });
 
         return $form;
     }
 
+    /**
+     * 创建扩展
+     *
+     * @return string
+     */
+    public function createExtension($package, $namespace)
+    {
+        $namespace = trim($namespace, '\\');
+
+        $output = new StringOutput();
+
+        Artisan::call('admin:extend', [
+            'extension'   => $package,
+            '--namespace' => $namespace,
+        ], $output);
+
+        return $output->getContent();
+    }
+
+    /**
+     * Validate extension name.
+     *
+     * @param string $name
+     *
+     * @return int
+     */
+    public function validateExtensionName($name)
+    {
+        return preg_match('/^[\w\-_]+\/[\w\-_]+$/', $name);
+    }
+
     /**
      * @param string $key
      *
@@ -194,7 +223,7 @@ class ExtensionController extends Controller
     }
 
     /**
-     * Make definitions.
+     * 字段显示定义.
      */
     protected function define()
     {
@@ -217,7 +246,7 @@ class ExtensionController extends Controller
             }
 
             foreach ($v as &$item) {
-                $item = "<span class='text-80 bold'>{$item['name']}</span> <<code>{$item['email']}</code>>";
+                $item = "<span class='text-80'>{$item['name']}</span> <<code>{$item['email']}</code>>";
             }
 
             return implode('<br/>', $v);

+ 1 - 1
src/Form.php

@@ -680,7 +680,7 @@ class Form implements Renderable
     }
 
     /**
-     * Get or Set data for insert or update.
+     * Get or set data for insert or update.
      *
      * @param array $updates
      *

+ 1 - 1
src/Layout/Assets.php

@@ -11,7 +11,7 @@ class Assets
      */
     protected $pathAlias = [
         // Dcat Admin静态资源路径别名
-        '@admin' => 'dcat-admin',
+        '@admin' => 'vendors/dcat-admin',
 
         // Dcat Acmin扩展静态资源路径别名
         '@extension' => '@admin/extensions',

+ 2 - 2
src/Widgets/Terminal.php

@@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Artisan;
 
 class Terminal extends Widget
 {
-    protected static $style = '<style>info{color: #21b978;}warning{color: #ffcc80}comment{color: rgba(255, 189, 74, .8);}error{color: #ff5b5b}</style>';
+    protected static $style = '.dump info{color: #21b978;}.dump warning{color: #ffcc80}.dump comment{color: rgba(255, 189, 74, .8);}.dump error{color: #ff5b5b}';
 
     protected $content;
 
@@ -51,7 +51,7 @@ class Terminal extends Widget
         static::$style = null;
 
         return <<<EOF
-{$style}<pre {$this->formatHtmlAttributes()}>{$this->content}</pre>
+<style>{$style}</style><pre {$this->formatHtmlAttributes()}>{$this->content}</pre>
 EOF;
     }
 }