变更
This commit is contained in:
@@ -12,8 +12,10 @@ namespace Kiri;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Kiri;
|
use Kiri;
|
||||||
use Kiri\Di\Container;
|
|
||||||
use Kiri\Abstracts\{BaseMain, Config, Kernel};
|
use Kiri\Abstracts\{BaseMain, Config, Kernel};
|
||||||
|
use Kiri\Di\LocalService;
|
||||||
|
use Kiri\Di\Scanner;
|
||||||
|
use Kiri\Error\ErrorHandler;
|
||||||
use Kiri\Events\{OnAfterCommandExecute, OnBeforeCommandExecute};
|
use Kiri\Events\{OnAfterCommandExecute, OnBeforeCommandExecute};
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
@@ -21,10 +23,7 @@ use ReflectionException;
|
|||||||
use Symfony\Component\Console\{Application as ConsoleApplication,
|
use Symfony\Component\Console\{Application as ConsoleApplication,
|
||||||
Input\ArgvInput,
|
Input\ArgvInput,
|
||||||
Output\ConsoleOutput,
|
Output\ConsoleOutput,
|
||||||
Output\OutputInterface
|
Output\OutputInterface};
|
||||||
};
|
|
||||||
use Kiri\Di\LocalService;
|
|
||||||
use Kiri\Error\ErrorHandler;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kiri;
|
|
||||||
|
|
||||||
use Exception;
|
|
||||||
use Kiri\Abstracts\Component;
|
|
||||||
use Kiri\Di\Container;
|
|
||||||
use ReflectionException;
|
|
||||||
|
|
||||||
class Scanner extends Component
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
private array $files = [];
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $path
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function read(string $path): void
|
|
||||||
{
|
|
||||||
$this->load_dir($path);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $namespace
|
|
||||||
* @return void
|
|
||||||
* @throws ReflectionException
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public function parse(string $namespace): void
|
|
||||||
{
|
|
||||||
$container = Container::instance();
|
|
||||||
foreach ($this->files as $file) {
|
|
||||||
$class = $namespace . '\\' . $this->rename($file);
|
|
||||||
if (file_exists($class)) {
|
|
||||||
error('Please follow the PSR-4 specification to write code.' . $class);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$container->parse($class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $file
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function rename(string $file): string
|
|
||||||
{
|
|
||||||
$filter = array_filter(explode('/', $file), function ($value) {
|
|
||||||
if (empty($value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return ucfirst($value);
|
|
||||||
});
|
|
||||||
array_shift($filter);
|
|
||||||
return implode('\\', $filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $path
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function load_dir(string $path): void
|
|
||||||
{
|
|
||||||
$dir = new \DirectoryIterator($path);
|
|
||||||
foreach ($dir as $value) {
|
|
||||||
if ($value->isDot()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($value->isDir()) {
|
|
||||||
$this->load_dir($value->getRealPath());
|
|
||||||
} else if ($value->getExtension() == '.php') {
|
|
||||||
$this->load_file($value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $path
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function load_file(string $path): void
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
require_once "$path";
|
|
||||||
$path = str_replace($_SERVER['HOME'], '', $path);
|
|
||||||
$path = str_replace('.php', '', $path);
|
|
||||||
$this->files[] = $path;
|
|
||||||
} catch (\Throwable $throwable) {
|
|
||||||
error($throwable->getMessage(), [$throwable]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user