针对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 协议》,转载必须注明作者和本文链接
codezhao
讨论数量: 2

排版乱了 :joy:

2年前 评论
codezhao (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!