mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-14 19:40:53 +08:00
42 lines
1.2 KiB
PHP
42 lines
1.2 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Illuminate\Console\Command;
|
||
use Illuminate\Support\Str;
|
||
|
||
class HookList extends Command
|
||
{
|
||
protected $signature = 'hook:list';
|
||
protected $description = '列出系统支持的所有 hooks(静态扫描代码)';
|
||
|
||
public function handle()
|
||
{
|
||
$paths = [base_path('app'), base_path('plugins')];
|
||
$hooks = collect();
|
||
$pattern = '/HookManager::(call|filter|register|registerFilter)\([\'\"]([a-zA-Z0-9_.-]+)[\'\"]/';
|
||
|
||
foreach ($paths as $path) {
|
||
$files = collect(
|
||
is_dir($path) ? (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path))) : []
|
||
)->filter(fn($f) => Str::endsWith($f, '.php'));
|
||
foreach ($files as $file) {
|
||
$content = @file_get_contents($file);
|
||
if ($content && preg_match_all($pattern, $content, $matches)) {
|
||
foreach ($matches[2] as $hook) {
|
||
$hooks->push($hook);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$hooks = $hooks->unique()->sort()->values();
|
||
if ($hooks->isEmpty()) {
|
||
$this->info('未扫描到任何 hook');
|
||
} else {
|
||
$this->info('All Supported Hooks:');
|
||
foreach ($hooks as $hook) {
|
||
$this->line(' ' . $hook);
|
||
}
|
||
}
|
||
}
|
||
} |