针对hyperf框架改造----自定刷新表结构注释
目的
- 命令刷新model表结构注释
图示
<?php declare(strict_types=1); namespace AppCommand; use HyperfCommandAnnotationCommand; use HyperfCommandCommand as HyperfCommand; use PsrContainerContainerInterface; /** * @Command */ class ModelRefreshCommand extends HyperfCommand { /** * @var ContainerInterface */ protected $container; /** * 执行的命令行. * * @var string */ protected $name = 'model:refresh'; public function __construct(ContainerInterface $container) { $this->container = $container; parent::__construct(); } public function configure() { parent::configure(); $this->setDescription('项目model初始化'); } public function handle() { $this->handleDirectoryFile(function ($pathName) { $pathInfo = pathinfo($pathName); $entity = str_replace('/', '', sprintf('%s%s%s', $pathInfo['dirname'], '/', $pathInfo['filename'])); $entity = str_replace('src', '', $entity); if (class_exists($entity)) { $model = new $entity(); $this->info($model->getModel()->getTable() . 'model开始刷新'); $this->call('gen:model', [ 'table' => $model->getModel()->getTable(), '--path' => $pathInfo['dirname'], ]); $this->info($model->getModel()->getTable() . 'model刷新成功'); } }, 'src', 'Model'); } /** * 处理目录文件. * @param callable $callback 闭包方法 * @param string $baseDir 基础目录 * @param string $needle 需要判断目录的条件 */ public function handleDirectoryFile(callable $callback, string $baseDir = 'src', string $needle = ''): void { $model = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($baseDir)); foreach ($model as $key => $val) { if (! is_file($val->getPathName())) { continue; } if (((! $needle) || (strpos($val->getPathName(), $needle) !== false)) && $callback) { $callback($val->getPathName()); } } } }
本作品采用《CC 协议》,转载必须注明作者和本文链接
排版乱了 :joy: