diff --git a/crmeb/app/adminapi/AdminApiExceptionHandle.php b/crmeb/app/adminapi/AdminApiExceptionHandle.php index 075813bf1..ae53ce948 100644 --- a/crmeb/app/adminapi/AdminApiExceptionHandle.php +++ b/crmeb/app/adminapi/AdminApiExceptionHandle.php @@ -45,26 +45,30 @@ class AdminApiExceptionHandle extends Handle public function report(Throwable $exception): void { if (!$this->isIgnoreReport($exception)) { - $data = [ - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - 'message' => $this->getMessage($exception), - 'code' => $this->getCode($exception), - ]; + try { + $data = [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'message' => $this->getMessage($exception), + 'code' => $this->getCode($exception), + ]; - //日志内容 - $log = [ - request()->adminId(), //管理员ID - request()->ip(), //客户ip - ceil(msectime() - (request()->time(true) * 1000)), //耗时(毫秒) - request()->rule()->getMethod(), //请求类型 - str_replace("/", "", request()->rootUrl()), //应用 - request()->baseUrl(), //路由 - json_encode(request()->param(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),//请求参数 - json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), //报错数据 + //日志内容 + $log = [ + request()->adminId(), //管理员ID + request()->ip(), //客户ip + ceil(msectime() - (request()->time(true) * 1000)), //耗时(毫秒) + request()->rule()->getMethod(), //请求类型 + str_replace("/", "", request()->rootUrl()), //应用 + request()->baseUrl(), //路由 + json_encode(request()->param(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),//请求参数 + json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), //报错数据 - ]; - Log::write(implode("|", $log), "error"); + ]; + Log::write(implode("|", $log), "error"); + } catch (\Throwable $e) { + Log::write($e->getMessage(), "error"); + } } } diff --git a/crmeb/app/adminapi/route/crud.php b/crmeb/app/adminapi/route/crud.php new file mode 100644 index 000000000..68460e244 --- /dev/null +++ b/crmeb/app/adminapi/route/crud.php @@ -0,0 +1,35 @@ + + * +---------------------------------------------------------------------- + */ + +use think\facade\Route; + +/** + * crud 自动加载路由 + * 自动加载crud目录下的所有路由文件 + */ +Route::group(function () { + $path = $this->app->getRootPath() . 'app' . DS . 'adminapi' . DS . 'route' . DS . 'crud'; + if (is_dir($path)) { + $files = scandir($path); + foreach ($files as $file) { + if ($file != '.' && $file != '..') { + include $path . DS . $file; + } + } + } +})->middleware([ + \app\http\middleware\AllowOriginMiddleware::class, + \app\adminapi\middleware\AdminAuthTokenMiddleware::class, + \app\adminapi\middleware\AdminCheckRoleMiddleware::class, + \app\adminapi\middleware\AdminLogMiddleware::class +]); diff --git a/crmeb/crmeb/services/crud/Controller.php b/crmeb/crmeb/services/crud/Controller.php index fcb943a64..f999f6044 100644 --- a/crmeb/crmeb/services/crud/Controller.php +++ b/crmeb/crmeb/services/crud/Controller.php @@ -32,6 +32,17 @@ class Controller extends Make */ protected $name = 'controller'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'adminapi' . DS . 'controller' . DS . 'crud'; + } + /** * @return mixed|void * @author 等风来 @@ -87,7 +98,7 @@ class Controller extends Make $filePath = $this->getFilePathName($path, $this->value['nameCamel']); - return $this->makeFile($filePath, $contentStr); + return [$this->makeFile($filePath, $contentStr), $filePath]; } /** @@ -100,7 +111,7 @@ class Controller extends Make */ protected function getStub(string $type = '') { - $controllerPath = __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'controller' . DIRECTORY_SEPARATOR; + $controllerPath = __DIR__ . DS . 'stubs' . DS . 'controller' . DS; $stubs = [ 'index' => $controllerPath . 'index.stub', @@ -129,6 +140,6 @@ class Controller extends Make $path = ltrim(str_replace('\\', '/', $path), '/'); - return $this->app->getBasePath() . $path . DIRECTORY_SEPARATOR . $name . '.' . $this->fileMime; + return $this->getBasePath($path) . $name . '.' . $this->fileMime; } } diff --git a/crmeb/crmeb/services/crud/Dao.php b/crmeb/crmeb/services/crud/Dao.php index 8787fb373..f6c0b570e 100644 --- a/crmeb/crmeb/services/crud/Dao.php +++ b/crmeb/crmeb/services/crud/Dao.php @@ -23,6 +23,17 @@ class Dao extends Make */ protected $name = "dao"; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'dao' . DS . 'crud'; + } + /** * 模板文件 * @param string $type @@ -33,6 +44,6 @@ class Dao extends Make */ protected function getStub(string $type = '') { - return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'dao' . DIRECTORY_SEPARATOR . 'CrudDao.stub'; + return __DIR__ . DS . 'stubs' . DS . 'dao' . DS . 'CrudDao.stub'; } } diff --git a/crmeb/crmeb/services/crud/Make.php b/crmeb/crmeb/services/crud/Make.php index 9fedbcafc..a55cd7399 100644 --- a/crmeb/crmeb/services/crud/Make.php +++ b/crmeb/crmeb/services/crud/Make.php @@ -29,7 +29,7 @@ abstract class Make { /** - * 命令名称 + * 名称 * @var string */ protected $name = ''; @@ -64,10 +64,17 @@ abstract class Make protected $adminTemplatePath; /** + * 默认保存路径 * @var string */ protected $basePath; + /** + * 默认文件夹 + * @var string + */ + protected $baseDir; + /** * @var */ @@ -83,11 +90,39 @@ abstract class Make $this->app = $app; $this->adminTemplatePath = dirname($this->app->getRootPath()) . DS . 'template' . DS . 'admin' . DS . 'src' . DS; $this->basePath = $this->app->getRootPath(); + $this->baseDir = $this->setBaseDir(); $this->authDrawVar(); $this->drawValueKeys(); $this->setDefaultValue(); } + /** + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'crud'; + } + + /** + * @param string $path + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function getBasePath(string $path = '') + { + //替换成本地路径格式 + $path = str_replace('/', DS, $path); + //替换掉和基础目录相同的 + $path = str_replace($this->baseDir, '', $path); + //多个斜杠的替换成一个 + return str_replace(DS . DS, DS, $this->basePath . $this->baseDir . DS . ($path ? $path . DS : '')); + } + /** * @param int $num * @return string @@ -127,7 +162,7 @@ abstract class Make [$nameData, $content] = $this->getStubContent($name); $this->value['name'] = $nameData; - if (isset($this->value['nameCamel'])) { + if (isset($this->value['nameCamel']) && !$this->value['nameCamel']) { $this->value['nameCamel'] = Str::studly($name); } if (isset($this->value['path'])) { @@ -138,7 +173,7 @@ abstract class Make $filePath = $this->getFilePathName($path, $this->value['nameCamel']); - return $this->makeFile($filePath, $contentStr); + return [$this->makeFile($filePath, $contentStr), $filePath]; } /** @@ -234,7 +269,7 @@ abstract class Make $path = ltrim(str_replace('\\', '/', $path), '/'); - return $this->basePath . $path . DIRECTORY_SEPARATOR . $name . ucwords($this->name) . '.' . $this->fileMime; + return $this->getBasePath($path) . $name . ucwords($this->name) . '.' . $this->fileMime; } /** @@ -326,13 +361,18 @@ abstract class Make throw new CrudException($this->name . ':' . $pathname . ' already exists!'); } - if (!is_dir(dirname($pathname))) { - mkdir(dirname($pathname), 0755, true); - } - $content = str_replace('', '', $content); if ($this->isMake) { + + try { + if (!is_dir(dirname($pathname))) { + mkdir(dirname($pathname), 0755, true); + } + } catch (\Throwable $e) { + throw new CrudException('CRUD创建目录报错,无法创建:' . dirname($pathname)); + } + try { file_put_contents($pathname, $content); } catch (\Throwable $e) { diff --git a/crmeb/crmeb/services/crud/Model.php b/crmeb/crmeb/services/crud/Model.php index 1836c828e..4e427ec1a 100644 --- a/crmeb/crmeb/services/crud/Model.php +++ b/crmeb/crmeb/services/crud/Model.php @@ -29,6 +29,17 @@ class Model extends Make */ protected $name = "model"; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'model' . DS . 'crud'; + } + /** * 模板文件 * @param string $type @@ -39,6 +50,6 @@ class Model extends Make */ protected function getStub(string $type = '') { - return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'CrudModel.stub'; + return __DIR__ . DS . 'stubs' . DS . 'model' . DS . 'CrudModel.stub'; } } diff --git a/crmeb/crmeb/services/crud/Route.php b/crmeb/crmeb/services/crud/Route.php index 6e6a4172e..774ea2701 100644 --- a/crmeb/crmeb/services/crud/Route.php +++ b/crmeb/crmeb/services/crud/Route.php @@ -23,6 +23,17 @@ class Route extends Make */ protected $name = 'route'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'adminapi' . DS . 'route' . DS . 'crud'; + } + /** * @param string $name * @param string $path @@ -71,7 +82,7 @@ class Route extends Make $filePath = $this->getFilePathName($path, $this->value['nameCamel']); - return $this->makeFile($filePath, $contentStr); + return [$this->makeFile($filePath, $contentStr), $filePath]; } /** @@ -84,7 +95,7 @@ class Route extends Make */ protected function getStub(string $type = 'route') { - $routePath = __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'route' . DIRECTORY_SEPARATOR; + $routePath = __DIR__ . DS . 'stubs' . DS . 'route' . DS; $stubs = [ 'index' => $routePath . 'index.stub', diff --git a/crmeb/crmeb/services/crud/Service.php b/crmeb/crmeb/services/crud/Service.php index ca85efc52..de1af91c8 100644 --- a/crmeb/crmeb/services/crud/Service.php +++ b/crmeb/crmeb/services/crud/Service.php @@ -23,6 +23,17 @@ class Service extends Make */ protected $name = "services"; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'services' . DS . 'crud'; + } + /** * @param string $name * @param string $path @@ -81,7 +92,7 @@ class Service extends Make $filePath = $this->getFilePathName($path, $this->value['nameCamel']); - return $this->makeFile($filePath, $contentStr); + return [$this->makeFile($filePath, $contentStr), $filePath]; } /** @@ -129,7 +140,7 @@ class Service extends Make */ protected function getStub(string $type = 'services') { - $servicePath = __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'service' . DIRECTORY_SEPARATOR; + $servicePath = __DIR__ . DS . 'stubs' . DS . 'service' . DS; $stubs = [ 'index' => $servicePath . 'CrudListIndex.stub', diff --git a/crmeb/crmeb/services/crud/Validate.php b/crmeb/crmeb/services/crud/Validate.php index 3c2108de3..706525dc3 100644 --- a/crmeb/crmeb/services/crud/Validate.php +++ b/crmeb/crmeb/services/crud/Validate.php @@ -27,6 +27,17 @@ class Validate extends Make */ protected $name = 'validate'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'app' . DS . 'adminapi' . DS . 'validate' . DS . 'crud'; + } + /** * 模板文件配置 * @param string $type @@ -34,6 +45,6 @@ class Validate extends Make */ protected function getStub(string $type = '') { - return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'validate' . DIRECTORY_SEPARATOR . 'CrudValidate.stub'; + return __DIR__ . DS . 'stubs' . DS . 'validate' . DS . 'CrudValidate.stub'; } } diff --git a/crmeb/crmeb/services/crud/ViewApi.php b/crmeb/crmeb/services/crud/ViewApi.php index 69f8b8b21..d1a94b889 100644 --- a/crmeb/crmeb/services/crud/ViewApi.php +++ b/crmeb/crmeb/services/crud/ViewApi.php @@ -31,6 +31,26 @@ class ViewApi extends Make */ protected $name = 'api'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'api' . DS . 'crud'; + } + + /** + * @param string $name + * @param string $path + * @param array $options + * @return array + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ public function handle(string $name, string $path, array $options = []) { @@ -49,9 +69,11 @@ class ViewApi extends Make $contentJs .= file_get_contents($this->getStub($item)) . "\n"; } + $nameCamel = Str::studly($name); + if ($contentJs) { $var = ['{%name%}', '{%route%}', '{%nameCamel%}']; - $value = [$name, $route, Str::studly($name)]; + $value = [$name, $route, $nameCamel]; $contentJs = str_replace($var, $value, $contentJs); } @@ -64,7 +86,7 @@ class ViewApi extends Make $this->basePath = $this->adminTemplatePath; $this->fileMime = 'js'; - $filePath = $this->getFilePathName($path, $this->value['nameCamel']); + $filePath = $this->getFilePathName($path, Str::camel($name)); $content = $this->makeFile($filePath, $contentStr); @@ -72,6 +94,21 @@ class ViewApi extends Make } + /** + * @param string $path + * @param string $name + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function getFilePathName(string $path, string $name): string + { + $path = ltrim(str_replace('\\', '/', $path), '/'); + + return $this->getBasePath($path) . $name . '.' . $this->fileMime; + } + /** * 模板文件配置 * @param string $type @@ -79,15 +116,15 @@ class ViewApi extends Make */ protected function getStub(string $type = 'api') { - $servicePath = __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'view' . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR; + $servicePath = __DIR__ . DS . 'stubs' . DS . 'view' . DS . 'api' . DS; $stubs = [ 'index' => $servicePath . 'getCrudListApi.stub', - 'create' => $servicePath . 'CrudUpdate.stub', - 'save' => $servicePath . 'CrudSave.stub', - 'edit' => $servicePath . 'GetCrudForm.stub', - 'update' => $servicePath . 'CrudUpdate.stub', - 'api' => $servicePath . 'CrudService.stub', + 'create' => $servicePath . 'crudUpdateApi.stub', + 'save' => $servicePath . 'crudSaveApi.stub', + 'edit' => $servicePath . 'getCrudEditApi.stub', + 'update' => $servicePath . 'CrudUpdateApi.stub', + 'api' => $servicePath . 'crud.stub', ]; return $type ? $stubs[$type] : $stubs; diff --git a/crmeb/crmeb/services/crud/ViewPages.php b/crmeb/crmeb/services/crud/ViewPages.php index 2f849de95..42925af08 100644 --- a/crmeb/crmeb/services/crud/ViewPages.php +++ b/crmeb/crmeb/services/crud/ViewPages.php @@ -30,6 +30,17 @@ class ViewPages extends Make */ protected $name = 'pages'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'pages' . DS . 'crud'; + } + /** * @param string $name * @param string $path @@ -50,11 +61,26 @@ class ViewPages extends Make $this->value['auth'] = Str::snake($name); $this->value['content-vue'] = "\n" . implode(',', $columnStr); $this->value['pathApiJs'] = $options['pathApiJs'] ?? ''; - $this->basePath = $this->adminTemplatePath; + $this->value['nameCamel'] = Str::snake($name, '-'); + $this->basePath = $this->adminTemplatePath . 'pages'; $this->fileMime = 'vue'; return parent::handle($name, $path, $options); // TODO: Change the autogenerated stub } + /** + * @param string $path + * @param string $name + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function getFilePathName(string $path, string $name): string + { + $path = ltrim(str_replace('\\', '/', $path), '/'); + return $this->getBasePath($path) . $name . '.' . $this->fileMime; + } + /** * @param string $type * @return string @@ -64,8 +90,8 @@ class ViewPages extends Make */ protected function getStub(string $type = '') { - return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'view' . - DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR . 'crud' . - DIRECTORY_SEPARATOR . 'index.stub'; + return __DIR__ . DS . 'stubs' . DS . 'view' . + DS . 'pages' . DS . 'crud' . + DS . 'index.stub'; } } diff --git a/crmeb/crmeb/services/crud/ViewRouter.php b/crmeb/crmeb/services/crud/ViewRouter.php index 269c42417..fb125a3ad 100644 --- a/crmeb/crmeb/services/crud/ViewRouter.php +++ b/crmeb/crmeb/services/crud/ViewRouter.php @@ -30,10 +30,29 @@ class ViewRouter extends Make */ protected $name = 'router'; + /** + * @return string + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ + protected function setBaseDir(): string + { + return 'router' . DS . 'modules' . DS . 'crud'; + } + /** + * @param string $name + * @param string $path + * @param array $options + * @return false|mixed|void + * @author 等风来 + * @email 136327134@qq.com + * @date 2023/4/4 + */ public function handle(string $name, string $path, array $options = []) { - $this->basePath = $this->adminTemplatePath; + $this->basePath = $this->adminTemplatePath . 'router' . DS . 'modules' . DS . 'crud'; $this->fileMime = 'js'; [$nameData, $content] = $this->getStubContent($name); @@ -58,12 +77,7 @@ class ViewRouter extends Make $makeContent = $this->makeFile($filePath, $contentStr); - dump($filePath); - $pathInfo = pathinfo($filePath); - dump($pathInfo); - $router = ''; - - return $makeContent; + return [$makeContent, $filePath]; } /** @@ -76,11 +90,8 @@ class ViewRouter extends Make */ protected function getFilePathName(string $path, string $name): string { - $path = str_replace(['app\\', 'app/'], '', $path); - $path = ltrim(str_replace('\\', '/', $path), '/'); - - return $this->basePath . $path . DIRECTORY_SEPARATOR . $name . '.' . $this->fileMime; + return $this->getBasePath($path) . $name . '.' . $this->fileMime; } /** @@ -92,8 +103,6 @@ class ViewRouter extends Make */ protected function getStub(string $type = '') { - return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'view' . - DIRECTORY_SEPARATOR . 'router' . DIRECTORY_SEPARATOR . 'modules' . - DIRECTORY_SEPARATOR . 'crud.stub'; + return __DIR__ . DS . 'stubs' . DS . 'view' . DS . 'router' . DS . 'modules' . DS . 'crud.stub'; } }