2020-07-02 13:19:23 +08:00
|
|
|
|
<?php
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
// | 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 ]
|
|
|
|
|
// +----------------------------------------------------------------------
|
2020-07-02 14:01:05 +08:00
|
|
|
|
namespace catcher;
|
|
|
|
|
|
2020-07-19 10:06:08 +08:00
|
|
|
|
use catcher\library\Composer;
|
|
|
|
|
use catcher\facade\FileSystem;
|
2020-07-02 14:01:05 +08:00
|
|
|
|
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()
|
|
|
|
|
{
|
2020-07-19 10:06:08 +08:00
|
|
|
|
$commandFiles = FileSystem::allFiles($this->path);
|
2020-07-02 14:01:05 +08:00
|
|
|
|
|
|
|
|
|
$commands = [];
|
|
|
|
|
|
2020-07-19 10:06:08 +08:00
|
|
|
|
/* \Symfony\Component\Finder\SplFileInfo $command */
|
2020-07-02 14:01:05 +08:00
|
|
|
|
foreach ($commandFiles as $command) {
|
2020-07-19 10:06:08 +08:00
|
|
|
|
if ($command->getExtension() === 'php') {
|
2020-07-02 14:01:05 +08:00
|
|
|
|
$lastPath = str_replace($this->parseNamespace(), '',pathinfo($command, PATHINFO_DIRNAME));
|
|
|
|
|
$namespace = $this->namespace . str_replace(DIRECTORY_SEPARATOR, '\\', $lastPath) . '\\';
|
|
|
|
|
$commandClass = $namespace . pathinfo($command, PATHINFO_FILENAME);
|
2020-07-28 08:19:51 +08:00
|
|
|
|
$commands[] = $commandClass;
|
2020-07-02 14:01:05 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $commands;
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-19 10:06:08 +08:00
|
|
|
|
/**
|
|
|
|
|
* 命名空间解析
|
|
|
|
|
*
|
|
|
|
|
* @time 2020年07月19日
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2020-07-02 14:01:05 +08:00
|
|
|
|
protected function parseNamespace()
|
|
|
|
|
{
|
|
|
|
|
// 没有设置 namespace 默认使用 extend 目录
|
|
|
|
|
if (!$this->namespace) {
|
|
|
|
|
return root_path(). 'extend';
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-19 10:06:08 +08:00
|
|
|
|
$psr4 = (new Composer())->psr4Autoload();
|
2020-07-02 14:01:05 +08:00
|
|
|
|
|
|
|
|
|
$rootNamespace = substr($this->namespace, 0, strpos($this->namespace, '\\') + 1);
|
|
|
|
|
|
2020-07-19 10:06:08 +08:00
|
|
|
|
return root_path(). $psr4[$rootNamespace] . DIRECTORY_SEPARATOR .
|
2020-07-02 14:01:05 +08:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|