Parcourir la source

代码生成器增加数据仓库表单以及支持自定义PSR4命名空间

jqh il y a 5 ans
Parent
commit
ea45e99347

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

@@ -7,6 +7,7 @@ return [
         'table'             => 'Table',
         'model'             => 'Model',
         'controller'        => 'Controller',
+        'repository'        => 'Repository',
         'add_field'         => 'Add field',
         'pk'                => 'Primary key',
         'soft_delete'       => 'Soft delete',

+ 1 - 0
resources/lang/zh-CN/admin.php

@@ -7,6 +7,7 @@ return [
         'table'             => '表名',
         'model'             => '模型',
         'controller'        => '控制器',
+        'repository'        => '数据仓库',
         'add_field'         => '添加字段',
         'pk'                => '主键',
         'soft_delete'       => '软删除',

+ 1 - 0
resources/lang/zh-TW/admin.php

@@ -7,6 +7,7 @@ return [
         'table'             => '表名',
         'model'             => '模型',
         'controller'        => '控制器',
+        'repository'        => '數據倉庫',
         'add_field'         => '添加欄位',
         'pk'                => '主鍵',
         'soft_delete'       => '軟刪除',

+ 16 - 0
resources/views/helpers/scaffold.blade.php

@@ -81,6 +81,16 @@
                     </div>
                 </div>
 
+
+                <div class="form-group row">
+                    <span for="inputRepositoryName" class="col-sm-1 control-label text-capitalize">{{(trans('admin.scaffold.repository'))}}</span>
+
+                    <div class="col-sm-4">
+                        <input type="text" name="repository_name" class="form-control text-capitalize" id="inputRepositoryName" placeholder="{{(trans('admin.scaffold.repository'))}}" value="{{ old('repository_name', "App\\Admin\\Repositories\\") }}">
+                    </div>
+                </div>
+
+
                 <div class="form-group row">
                     <div class="offset-sm-1 col-sm-11 mt-1 text-capitalize">
                         {!! $actionCreators->render(); !!}
@@ -259,10 +269,12 @@
     Dcat.ready(function () {
         var $model = $('#inputModelName'),
             $controller = $('#inputControllerName'),
+            $repository = $('#inputRepositoryName'),
             $table = $('#inputTableName'),
             $fieldsBody = $('#table-fields tbody'),
             tpl = $('#table-field-tpl').html(),
             modelNamespace = 'App\\Models\\',
+            repositoryNamespace = 'App\\Admin\\Repositories\\',
             controllerNamespace = 'App\\Admin\\Controllers\\',
             dataTypeMap = {!! json_encode($dataTypeMap) !!},
             helpers = Dcat.helpers;
@@ -272,6 +284,7 @@
                 success: function (data) {
                     writeController(data.value);
                     writeModel(data.value);
+                    witeRepository(data.value);
                 }
             });
         }, 500);
@@ -435,6 +448,9 @@
         function writeModel(val) {
             $model.val(modelNamespace + ucfirst(ucfirst(toHump(toLine(val)))));
         }
+        function witeRepository(val) {
+            $repository.val(repositoryNamespace + ucfirst(ucfirst(toHump(toLine(val)))))
+        }
 
         function getTR() {
             return $('#table-fields tbody tr');

+ 12 - 9
src/Controllers/ScaffoldController.php

@@ -10,6 +10,7 @@ use Dcat\Admin\Scaffold\LangCreator;
 use Dcat\Admin\Scaffold\MigrationCreator;
 use Dcat\Admin\Scaffold\ModelCreator;
 use Dcat\Admin\Scaffold\RepositoryCreator;
+use Dcat\Admin\Support\Helper;
 use Illuminate\Http\Request;
 use Illuminate\Routing\Controller;
 use Illuminate\Support\Arr;
@@ -107,11 +108,15 @@ class ScaffoldController extends Controller
         $message = '';
 
         $creates = (array) $request->get('create');
+        $table = Helper::slug($request->get('table_name'), '_');
+        $controller = $request->get('controller_name');
+        $model = $request->get('model_name');
+        $repository = $request->get('repository_name');
 
         try {
             // 1. Create model.
             if (in_array('model', $creates)) {
-                $modelCreator = new ModelCreator($request->get('table_name'), $request->get('model_name'));
+                $modelCreator = new ModelCreator($table, $model);
 
                 $paths['model'] = $modelCreator->create(
                     $request->get('primary_key'),
@@ -122,30 +127,30 @@ class ScaffoldController extends Controller
 
             // 2. Create controller.
             if (in_array('controller', $creates)) {
-                $paths['controller'] = (new ControllerCreator($request->get('controller_name')))
-                    ->create(in_array('repository', $creates) ? null : $request->get('model_name'));
+                $paths['controller'] = (new ControllerCreator($controller))
+                    ->create(in_array('repository', $creates) ? $repository : $model);
             }
 
             // 3. Create migration.
             if (in_array('migration', $creates)) {
-                $migrationName = 'create_'.$request->get('table_name').'_table';
+                $migrationName = 'create_'.$table.'_table';
 
                 $paths['migration'] = (new MigrationCreator(app('files')))->buildBluePrint(
                     $request->get('fields'),
                     $request->get('primary_key', 'id'),
                     $request->get('timestamps') == 1,
                     $request->get('soft_deletes') == 1
-                )->create($migrationName, database_path('migrations'), $request->get('table_name'));
+                )->create($migrationName, database_path('migrations'), $table);
             }
 
             if (in_array('lang', $creates)) {
                 $paths['lang'] = (new LangCreator($request->get('fields')))
-                    ->create($request->get('controller_name'));
+                    ->create($controller);
             }
 
             if (in_array('repository', $creates)) {
                 $paths['repository'] = (new RepositoryCreator())
-                    ->create($request->get('controller_name'), $request->get('model_name'));
+                    ->create($model, $repository);
             }
 
             // Run migrate.
@@ -156,8 +161,6 @@ class ScaffoldController extends Controller
 
             // Make ide helper file.
             if (in_array('migrate', $creates) || in_array('controller', $creates)) {
-                $controller = $request->get('controller_name');
-
                 try {
                     Artisan::call('admin:ide-helper', ['-c' => $controller]);
 

+ 5 - 7
src/Scaffold/ControllerCreator.php

@@ -2,6 +2,8 @@
 
 namespace Dcat\Admin\Scaffold;
 
+use Dcat\Admin\Support\Helper;
+
 class ControllerCreator
 {
     use GridCreator, FormCreator, ShowCreator;
@@ -44,7 +46,7 @@ class ControllerCreator
      */
     public function create($model)
     {
-        $path = $this->getpath($this->name);
+        $path = $this->getPath($this->name);
         $dir = dirname($path);
 
         if (! is_dir($dir)) {
@@ -131,17 +133,13 @@ class ControllerCreator
     /**
      * Get file path from giving controller name.
      *
-     * @param $name
+     * @param string $name
      *
      * @return string
      */
     public function getPath($name)
     {
-        $segments = explode('\\', $name);
-
-        array_shift($segments);
-
-        return app_path(implode('/', $segments)).'.php';
+        return Helper::guessClassFileName($name);
     }
 
     /**

+ 2 - 5
src/Scaffold/ModelCreator.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Scaffold;
 
+use Dcat\Admin\Support\Helper;
 use Illuminate\Support\Str;
 
 class ModelCreator
@@ -93,11 +94,7 @@ class ModelCreator
      */
     public function getPath($name)
     {
-        $segments = explode('\\', $name);
-
-        array_shift($segments);
-
-        return app_path(implode('/', $segments)).'.php';
+        return Helper::guessClassFileName($name);
     }
 
     /**

+ 14 - 16
src/Scaffold/RepositoryCreator.php

@@ -2,26 +2,23 @@
 
 namespace Dcat\Admin\Scaffold;
 
+use Dcat\Admin\Support\Helper;
+
 class RepositoryCreator
 {
-    protected $path = 'Admin/Repositories';
-
     /**
-     * @param string $controllerClass
      * @param string $modelClass
+     * @param string $repositoryClass
      *
      * @return string
      */
-    public function create(string $controllerClass, string $modelClass)
+    public function create(?string $modelClass, ?string $repositoryClass)
     {
-        $baseController = class_basename($controllerClass);
-        $controller = str_replace('Controller', '', $baseController);
-
         $model = class_basename($modelClass);
 
         $files = app('files');
 
-        $path = app_path("{$this->path}/{$controller}.php");
+        $path = Helper::guessClassFileName($repositoryClass);
         $dir = dirname($path);
 
         if (! is_dir($dir)) {
@@ -35,17 +32,13 @@ class RepositoryCreator
         $content = $files->get($this->stub());
 
         $files->put($path, str_replace([
-            '{controllerClass}',
-            '{baseController}',
-            '{controller}',
-            '{modelClass}',
+            '{namespace}',
+            '{class}',
             '{model}',
         ], [
-            $controllerClass,
-            $baseController,
-            $controller,
+            $this->getNamespace($repositoryClass),
+            class_basename($repositoryClass),
             $modelClass,
-            $model,
         ], $content));
 
         $files->chmod($path, 0777);
@@ -53,6 +46,11 @@ class RepositoryCreator
         return $path;
     }
 
+    protected function getNamespace($name)
+    {
+        return trim(implode('\\', array_slice(explode('\\', $name), 0, -1)), '\\');
+    }
+
     protected function stub()
     {
         return __DIR__.'/stubs/repository.stub';

+ 0 - 1
src/Scaffold/stubs/model.stub

@@ -14,5 +14,4 @@ class DummyClass extends Model
     DummyModelTable
     DummyModelKey
     DummyTimestamp
-
 }

+ 4 - 4
src/Scaffold/stubs/repository.stub

@@ -1,16 +1,16 @@
 <?php
 
-namespace App\Admin\Repositories;
+namespace {namespace};
 
+use {model} as Model;
 use Dcat\Admin\Repositories\EloquentRepository;
-use {modelClass} as {model}Model;
 
-class {controller} extends EloquentRepository
+class {class} extends EloquentRepository
 {
     /**
      * Model.
      *
      * @var string
      */
-    protected $eloquentClass = {model}Model::class;
+    protected $eloquentClass = Model::class;
 }