针对hyperf框架改造----自定刷新表结构注释

2021-12-24 18:38:18 浏览数 (1)

目的

  • 命令刷新model表结构注释

图示

代码语言:javascript复制
<?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());
            }
        }
    }
}

PHP

Copy

0 人点赞