Tp5 的自动加载命令
将以下代码放在tp5的 application\common.php 内并执行函数,系统会自动的获取app下的各应用内的 command 目录的命令,注意,不要在application\command.php
if (!function_exists('addDefaultCommands')) {
function addDefaultCommands()
{
$dir = __DIR__;
$items = scandir($dir);
$dirs = [];
foreach ($items as $item) {
if ($item === '.' || $item === '..') {
continue;
}
$path = $dir . DIRECTORY_SEPARATOR . $item . DIRECTORY_SEPARATOR . 'command';
if (@is_dir($path)) {
$dirs[$item][] = $path;
}
}
$dirs['base'][] = $dir . DIRECTORY_SEPARATOR . 'command';
$commands = [];
foreach ($dirs as $model => $dir) {
foreach ($dir as $key => $value) {
if (is_dir($value)) {
$Files = scandir($value);
foreach ($Files as $file) {
if ($file === '.' || $file === '..') {
continue;
}
$model_ = ($model !== 'base') ? $model . '\\' : '';
$className = 'app\\' . $model_ . 'command\\' . basename($file, '.php');
if (class_exists($className)) {
$commands[$model . ':' . strtolower(basename($file, '.php'))] = $className;
}
}
}
}
}
\think\Console::addDefaultCommands($commands);
}
}
addDefaultCommands();
Tp6的操作如下:
将此service正常导入到service配置中,将现有的命令行注释掉引用即可
<?php
namespace app\common\service\Console;
use think\facade\Cache;
use think\Service as BaseService;
/**
* 自动注册模块命令
*/
class AutoRegModeConsoleService extends BaseService
{
public function boot()
{
$this->commands($this->getFile());
return true;
}
function getFile()
{
$dir = root_path() . 'app';
$items = scandir($dir);
$dirs = [];
foreach ($items as $item) {
if ($item === '.' || $item === '..') {
continue;
}
$path = $dir . DIRECTORY_SEPARATOR . $item . DIRECTORY_SEPARATOR . 'command';
if (@is_dir($path)) {
$dirs[$item][] = $path;
}
}
$dirs['base'][] = $dir . DIRECTORY_SEPARATOR . 'command';
$commands = [];
foreach ($dirs as $model => $dir) {
foreach ($dir as $key => $value) {
if (is_dir($value)) {
$Files = scandir($value);
foreach ($Files as $file) {
if ($file === '.' || $file === '..') {
continue;
}
$model_ = ($model !== 'base') ? $model . '\\' : '';
$className = 'app\\' . $model_ . 'command\\' . basename($file, '.php');
if (class_exists($className)) {
$commands[$model . ':' . strtolower(basename($file, '.php'))] = $className;
}
}
}
}
}
return $commands;
}
}
<?php
use app\common\service\Console\AutoRegModeConsoleService;
use app\common\service\MultiApp\Service;
// 系统服务定义文件
// 服务在完成全局初始化之后执行
return [
Service::class,
AutoRegModeConsoleService::class,
];