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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|