123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- declare(strict_types=1);
- // +----------------------------------------------------------------------
- // | CatchAdmin [Just Like ~ ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2020 http://catchadmin.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( https://github.com/yanwenwu/catch-admin/blob/master/LICENSE.txt )
- // +----------------------------------------------------------------------
- // | Author: JaguarJack [ njphper@gmail.com ]
- // +----------------------------------------------------------------------
- namespace catcher;
- use catcher\library\Composer;
- use catcher\facade\FileSystem;
- use Symfony\Component\Finder\SplFileInfo;
- use think\App;
- use think\console\Command;
- class CatchConsole
- {
- protected $app;
- protected $namespace = '';
- protected $path = __DIR__ . DIRECTORY_SEPARATOR . 'command';
- public function __construct(App $app)
- {
- $this->app = $app;
- }
- /**
- * 获取 commands
- *
- * @time 2020年07月02日
- * @return array
- */
- public function commands()
- {
- $commandFiles = FileSystem::allFiles($this->path);
- $commands = [];
- /* \Symfony\Component\Finder\SplFileInfo $command */
- foreach ($commandFiles as $command) {
- if ($command->getExtension() === 'php') {
- $lastPath = str_replace($this->parseNamespace(), '', pathinfo($command->getPathname(), PATHINFO_DIRNAME));
- $namespace = $this->namespace . str_replace(DIRECTORY_SEPARATOR, '\\', $lastPath) . '\\';
- $commandClass = $namespace . pathinfo($command->getPathname(), PATHINFO_FILENAME);
- $commands[] = $commandClass;
- }
- }
- return $commands;
- }
- /**
- * 命名空间解析
- *
- * @time 2020年07月19日
- * @return string
- */
- protected function parseNamespace()
- {
- // 没有设置 namespace 默认使用 extend 目录
- if (!$this->namespace) {
- return root_path(). 'extend';
- }
- $psr4 = (new Composer())->psr4Autoload();
- $rootNamespace = substr($this->namespace, 0, strpos($this->namespace, '\\') + 1);
- return root_path(). $psr4[$rootNamespace] . DIRECTORY_SEPARATOR .
- str_replace('\\', DIRECTORY_SEPARATOR, substr($this->namespace, strpos($this->namespace, '\\') + 1));
- }
- /**
- * set path
- *
- * @time 2020年07月02日
- * @param $path
- * @return $this
- */
- public function path($path)
- {
- $this->path = $path;
- return $this;
- }
- /**
- * 设置命名空间
- *
- * @time 2020年07月02日
- * @param $namespace
- * @return $this
- */
- public function setNamespace($namespace)
- {
- $this->namespace = $namespace;
- return $this;
- }
- }
|