From 38f00206ebfed7eb3a993c85b3af727915d48130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E6=9E=97?= Date: Wed, 22 Jun 2022 16:29:42 +0800 Subject: [PATCH] modify plugin name --- Kiri.php | 95 +-- ReturnTypeWillChange.php | 16 + composer.json | 1 + function.php | 136 ++-- kiri-annotation/AbstractAttribute.php | 2 +- kiri-annotation/Inject.php | 150 ++--- .../{BaseApplication.php => BaseMain.php} | 588 +++++++++--------- kiri-engine/Abstracts/Logger.php | 19 +- kiri-engine/Abstracts/Provider.php | 4 +- kiri-engine/Abstracts/Providers.php | 13 + kiri-engine/Application.php | 249 -------- kiri-engine/Core/HashMap.php | 2 +- kiri-engine/Error/ErrorHandler.php | 4 +- kiri-engine/Error/ErrorInterface.php | 2 +- kiri-engine/Main.php | 127 ++++ kiri-task/OnServerTask.php | 4 +- 16 files changed, 597 insertions(+), 815 deletions(-) create mode 100644 ReturnTypeWillChange.php rename kiri-engine/Abstracts/{BaseApplication.php => BaseMain.php} (74%) delete mode 100644 kiri-engine/Application.php create mode 100644 kiri-engine/Main.php diff --git a/Kiri.php b/Kiri.php index def907cf..d9d108ae 100644 --- a/Kiri.php +++ b/Kiri.php @@ -10,12 +10,15 @@ use Database\ModelInterface; use JetBrains\PhpStorm\Pure; use Kiri\Abstracts\Config; use Kiri\Annotation\Annotation; -use Kiri\Application; +use Kiri\Main; use Kiri\Core\Json; use Kiri\Di\Container; +use Kiri\Di\LocalService; use Kiri\Environmental; use Kiri\Di\ContainerInterface; +use Kiri\Error\StdoutLoggerInterface; use Kiri\Exception\ConfigException; +use Psr\Log\LoggerInterface; use Swoole\Coroutine; use Swoole\Process; use Swoole\WebSocket\Server; @@ -40,25 +43,10 @@ class Kiri private static Container $container; - /** @var ?Application */ - private static ?Application $service = null; - - - /** - * @param $service - * - * 初始化服务 - */ - public static function init($service) - { - static::$service = $service; - } - - /** * @param Container $container */ - public static function setContainer(Container $container) + public static function setContainer(Container $container): void { $container->setBindings(ContainerInterface::class, $container); static::$container = $container; @@ -74,54 +62,6 @@ class Kiri } - /** - * @param $alias - * @param array $array - * @throws Exception - */ - public static function set($alias, array $array = []) - { - static::app()->set($alias, $array); - } - - - /** - * @param string $name - * @return mixed - * @throws Exception - */ - public static function getApp(string $name): mixed - { - return static::app()->get($name); - } - - /** - * @return Application|null - */ - public static function app(): ?Application - { - return static::$service; - } - - - /** - * @return Application|null - */ - public static function getFactory(): ?Application - { - return static::$service; - } - - - /** - * @return Application|null - */ - public static function getApplicationContext(): ?Application - { - return static::$service; - } - - /** * @return Container|null */ @@ -130,16 +70,6 @@ class Kiri return static::$container; } - /** - * @param $name - * @return bool - */ - public static function has($name): bool - { - return static::$service->has($name); - } - - /** * @return Annotation * @throws Exception @@ -215,11 +145,20 @@ class Kiri /** - * @return Container + * @return LocalService */ - public static function di(): Container + public static function service(): LocalService { - return static::$container; + return static::$container->get(LocalService::class); + } + + + /** + * @return LoggerInterface + */ + public static function getLogger(): LoggerInterface + { + return static::$container->get(LoggerInterface::class); } diff --git a/ReturnTypeWillChange.php b/ReturnTypeWillChange.php new file mode 100644 index 00000000..784267e0 --- /dev/null +++ b/ReturnTypeWillChange.php @@ -0,0 +1,16 @@ +get($name); - } - if (empty($default)) { - throw new Exception("Unknown component ID: $name"); - } - if (Kiri::has($default)) { - return Kiri::app()->get($default); - } - return null; + if (!class_exists($name) && !interface_exists($name)) { + return Kiri::getDi()->get($default); } - return Kiri::createObject($default); + return Kiri::getDi()->get($name); + } + + +} + +if (!function_exists('instance')) { + + + /** + * @param $class + * @param array $constrict + * @param array $config + * @return mixed + */ + function instance($class, array $constrict = [], array $config = []): mixed + { + return Kiri::getDi()->create($class, $constrict, $config); } @@ -232,22 +240,6 @@ if (!function_exists('scan_directory')) { } -if (!class_exists('ReturnTypeWillChange')) { - - /** - * @since 8.1 - */ - #[Attribute(Attribute::TARGET_METHOD)] - final class ReturnTypeWillChange - { - public function __construct() - { - } - } - - -} - if (!function_exists('injectRuntime')) { @@ -258,7 +250,7 @@ if (!function_exists('injectRuntime')) { * @throws ReflectionException * @throws Exception */ - function injectRuntime(string $path, array $exclude = []) + function injectRuntime(string $path, array $exclude = []): void { $fileLists = Kiri::getAnnotation()->runtime($path, $exclude); @@ -482,23 +474,13 @@ if (!function_exists('fire')) { } } - -if (!function_exists('app')) { +if (!function_exists('instance_load')) { /** - * @return Application|null + * @return void */ - #[Pure] function app(): ?Application - { - return Kiri::app(); - } - -} - -if (!function_exists('instance_load')) { - - function instance_load() + function instance_load(): void { $content = json_decode(file_get_contents(__DIR__ . '/composer.json'), TRUE); if (isset($content['autoload']) && isset($content['autoload']['psr-4'])) { @@ -1028,36 +1010,6 @@ if (!function_exists('router')) { } -if (!function_exists('isService')) { - - - /** - * @param string $name - * @return bool - */ - function isService(string $name): bool - { - return Kiri::app()->has($name); - } - -} - -if (!function_exists('getService')) { - - - /** - * @param string $name - * @return mixed - * @throws Exception - */ - function getService(string $name): mixed - { - return Kiri::app()->get($name); - } - -} - - if (!function_exists('jTraceEx')) { /** @@ -1139,9 +1091,9 @@ if (!function_exists('debug')) { * @param string $method * @throws Exception */ - function debug(mixed $message, string $method = 'app') + function debug(mixed $message, string $method = 'app'): void { - Kiri::app()->debug($message, $method); + Kiri::getLogger()->debug($method, [$message]); } } @@ -1153,9 +1105,9 @@ if (!function_exists('info')) { * @param string $method * @throws Exception */ - function info(mixed $message, string $method = 'app') + function info(mixed $message, string $method = 'app'): void { - Kiri::app()->info($message, $method); + Kiri::getLogger()->info($method, [$message]); } } @@ -1165,11 +1117,12 @@ if (!function_exists('error')) { /** * @param mixed $message * @param string $method - * @throws Exception + * @return bool */ - function error(mixed $message, string $method = 'error') + function error(mixed $message, string $method = 'error'): bool { - Kiri::getDi()->get(LoggerInterface::class)->error($method, [$message]); + Kiri::getLogger()->error($method, [$message]); + return false; } } @@ -1182,19 +1135,19 @@ if (!function_exists('success')) { */ function success(mixed $message, string $method = 'app') { - Kiri::app()->success($message, $method); + Kiri::getLogger()->critical($method, [$message]); } } -if (!function_exists('error_trigger_format')) { +if (!function_exists('throwable')) { /** * @param Throwable|Error $throwable * @return string */ - function error_trigger_format(\Throwable|\Error $throwable): string + function throwable(\Throwable|\Error $throwable): string { $message = "Throwable: " . $throwable->getMessage() . "\n" . ' ' . $throwable->getFile() . " at line " . $throwable->getLine() . "\n"; @@ -1205,8 +1158,23 @@ if (!function_exists('error_trigger_format')) { } $message .= $value['file'] . " -> " . $value['line'] . "(" . (isset($value['class']) ? $value['class'] . '::' : '') . ($value['function'] ?? 'Closure') . ")\n"; } - return "\033[41;37m" . $message . "\033[0m"; + return $message; } } + +if (!function_exists('map')) { + + /** + * @param array $map + * @param Closure $closure + * @return void + */ + function map(array $map, Closure $closure): void + { + foreach ($map as $key => $value) { + $closure($key, $value); + } + } +} diff --git a/kiri-annotation/AbstractAttribute.php b/kiri-annotation/AbstractAttribute.php index 22b3e32c..1938e86c 100644 --- a/kiri-annotation/AbstractAttribute.php +++ b/kiri-annotation/AbstractAttribute.php @@ -17,7 +17,7 @@ abstract class AbstractAttribute implements IAnnotation * @param mixed|string $method * @return mixed */ - #[\ReturnTypeWillChange] + #[\Kiri\ReturnTypeWillChange] public function execute(mixed $class, mixed $method = ''): mixed { // TODO: Implement execute() method. diff --git a/kiri-annotation/Inject.php b/kiri-annotation/Inject.php index 858dd5d0..4996747a 100644 --- a/kiri-annotation/Inject.php +++ b/kiri-annotation/Inject.php @@ -7,6 +7,7 @@ namespace Kiri\Annotation; use Exception; use Kiri\Core\Str; use Kiri; +use Kiri\Di\LocalService; use ReflectionException; use ReflectionProperty; @@ -18,87 +19,88 @@ use ReflectionProperty; { - /** - * Inject constructor. - * @param string $value - * @param array $construct - */ - public function __construct(public string $value, public array $construct = []) - { - } + /** + * Inject constructor. + * @param string $value + * @param array $construct + */ + public function __construct(public string $value, public array $construct = []) + { + } - /** - * @param mixed $class - * @param mixed|null $method - * @return bool - * @throws ReflectionException - * @throws Exception - */ - public function execute(mixed $class, mixed $method = null): bool - { - if (!($method = $this->getProperty($class, $method))) { - return false; - } - /** @var ReflectionProperty $class */ - $injectValue = static::parseInjectValue(); - if ($method->isPrivate() || $method->isProtected()) { - $this->setter($class, $method, $injectValue); - } else { - $class->{$method->getName()} = $injectValue; - } - return true; - } + /** + * @param mixed $class + * @param mixed|null $method + * @return bool + * @throws ReflectionException + * @throws Exception + */ + public function execute(mixed $class, mixed $method = null): bool + { + if (!($method = $this->getProperty($class, $method))) { + return false; + } + /** @var ReflectionProperty $class */ + $injectValue = static::parseInjectValue(); + if ($method->isPrivate() || $method->isProtected()) { + $this->setter($class, $method, $injectValue); + } else { + $class->{$method->getName()} = $injectValue; + } + return true; + } - /** - * @param $class - * @param $method - * @param $injectValue - */ - private function setter($class, $method, $injectValue) - { - $method = 'set' . ucfirst(Str::convertUnderline($method->getName())); - if (!method_exists($class, $method)) { - return; - } - $class->$method($injectValue); - } + /** + * @param $class + * @param $method + * @param $injectValue + */ + private function setter($class, $method, $injectValue) + { + $method = 'set' . ucfirst(Str::convertUnderline($method->getName())); + if (!method_exists($class, $method)) { + return; + } + $class->$method($injectValue); + } - /** - * @param $class - * @param $method - * @return ReflectionProperty|bool - */ - private function getProperty($class, $method): ReflectionProperty|bool - { - if ($method instanceof ReflectionProperty && !$method->isStatic()) { - return $method; - } - if (is_object($class)) $class = $class::class; - $method = Kiri::getDi()->getClassReflectionProperty($class, $method); - if (!$method || $method->isStatic()) { - return false; - } - return $method; - } + /** + * @param $class + * @param $method + * @return ReflectionProperty|bool + * @throws ReflectionException + */ + private function getProperty($class, $method): ReflectionProperty|bool + { + if ($method instanceof ReflectionProperty && !$method->isStatic()) { + return $method; + } + if (is_object($class)) $class = $class::class; + $method = Kiri::getDi()->getClassReflectionProperty($class, $method); + if (!$method || $method->isStatic()) { + return false; + } + return $method; + } - /** - * @return mixed - * @throws Exception - */ - private function parseInjectValue(): mixed - { - if (!Kiri::app()->has($this->value)) { - if (!empty($this->construct)) { - return Kiri::getDi()->create($this->value, $this->construct); - } - return Kiri::getDi()->get($this->value); - } else { - return Kiri::app()->get($this->value); - } - } + /** + * @return mixed + * @throws Exception + */ + private function parseInjectValue(): mixed + { + $localService = Kiri::getDi()->get(LocalService::class); + if ($localService->has($this->value)) { + return $localService->get($this->value); + } + if (!empty($this->construct)) { + return instance($this->value, $this->construct); + } + return di($this->value); + } } diff --git a/kiri-engine/Abstracts/BaseApplication.php b/kiri-engine/Abstracts/BaseMain.php similarity index 74% rename from kiri-engine/Abstracts/BaseApplication.php rename to kiri-engine/Abstracts/BaseMain.php index 0ccf3720..360e3a43 100644 --- a/kiri-engine/Abstracts/BaseApplication.php +++ b/kiri-engine/Abstracts/BaseMain.php @@ -1,311 +1,277 @@ -mapping($config['mapping'] ?? []); - $this->parseInt($config); - $this->parseEvents($config); - $this->initErrorHandler(); - $this->enableEnvConfig(); - parent::__construct(); - } - - - /** - * @param array $mapping - */ - public function mapping(array $mapping) - { - $di = Kiri::getDi(); - $di->mapping(StdoutLoggerInterface::class, StdoutLogger::class); - $di->mapping(LoggerInterface::class, Logger::class); - foreach ($mapping as $interface => $class) { - $di->mapping($interface, $class); - } - } - - - /** - * @return array - */ - public function enableEnvConfig(): array - { - if (!file_exists($this->envPath)) { - return []; - } - $lines = $this->readLinesFromFile($this->envPath); - foreach ($lines as $line) { - if (!$this->isComment($line) && $this->looksLikeSetter($line)) { - [$key, $value] = explode('=', $line); - putenv(trim($key) . '=' . trim($value)); - } - } - return $lines; - } - - - /** - * Read lines from the file, auto detecting line endings. - * - * @param string $filePath - * - * @return array - */ - protected function readLinesFromFile(string $filePath): array - { - // Read file into an array of lines with auto-detected line endings -// $autodetect = ini_get('auto_detect_line_endings'); -// ini_set('auto_detect_line_endings', '1'); - // ini_set('auto_detect_line_endings', $autodetect); - - return file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - } - - /** - * Determine if the line in the file is a comment, e.g. begins with a #. - * - * @param string $line - * - * @return bool - */ - protected function isComment(string $line): bool - { - $line = ltrim($line); - - return isset($line[0]) && $line[0] === '#'; - } - - /** - * Determine if the given line looks like it's setting a variable. - * - * @param string $line - * - * @return bool - */ - protected function looksLikeSetter(string $line): bool - { - return str_contains($line, '='); - } - - - /** - * @param $config - * - * @throws - */ - public function parseInt($config) - { - Config::sets($config); - if ($storage = Config::get('storage', 'storage')) { - if (!str_contains($storage, APP_PATH)) { - $storage = APP_PATH . $storage . '/'; - } - if (!is_dir($storage)) { - mkdir($storage); - } - if (!is_dir($storage) || !is_writeable($storage)) { - throw new InitException("Directory {$storage} does not have write permission"); - } - } - } - - /** - * @param $config - * - * @throws - */ - public function parseEvents($config) - { - if (!isset($config['events']) || !is_array($config['events'])) { - return; - } - foreach ($config['events'] as $key => $value) { - if (is_string($value)) { - $value = Kiri::createObject($value); - } - $this->addEvent($key, $value); - } - } - - - /** - * @param $key - * @param $value - * @return void - * @throws InitException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - * @throws Exception - */ - private function addEvent($key, $value): void - { - if ($value instanceof \Closure || is_object($value)) { - $this->eventProvider->on($key, $value, 0); - return; - } - - - if (is_array($value)) { - if (is_object($value[0]) && !($value[0] instanceof \Closure)) { - $this->eventProvider->on($key, $value, 0); - return; - } - - if (is_string($value[0])) { - $value[0] = Kiri::createObject($value[0]); - $this->eventProvider->on($key, $value, 0); - return; - } - - - foreach ($value as $item) { - if (!is_callable($item, true)) { - throw new InitException("Class does not hav callback."); - } - $this->eventProvider->on($key, $item, 0); - } - } - - } - - - /** - * @param $name - * @return mixed - * @throws Exception - */ - public function clone($name): mixed - { - return clone $this->get($name); - } - - /** - * - * @throws Exception - */ - public function initErrorHandler() - { - $error = Kiri::getDi()->get(ErrorHandler::class); - $error->register(); - } - - - /** - * @param $name - * @return mixed - * @throws - */ - public function get($name): mixed - { - return Kiri::getDi()->get(LocalService::class)->get($name); - } - - - /** - * @return mixed - */ - public function getLocalIps(): mixed - { - return swoole_get_local_ip(); - } - - - /** - * @return mixed - */ - public function getFirstLocal(): mixed - { - return current($this->getLocalIps()); - } - - - /** - * - * @return Server - * @throws - */ - public function getServer(): Server - { - return Kiri::getDi()->get(Server::class); - } - - - /** - * @param string $name - * @return mixed|null - * @throws Exception - */ - public function __get(string $name) - { - $localService = Kiri::getDi()->get(LocalService::class); - if ($localService->has($name)) { - return $localService->get($name); - } - return parent::__get($name); // TODO: Change the autogenerated stub - } - - - /** - * @param $id - * @param $definition - */ - public function set($id, $definition): void - { - Kiri::getDi()->get(LocalService::class)->set($id, $definition); - } - - - /** - * @param $id - * @return bool - */ - public function has($id): bool - { - return Kiri::getDi()->get(LocalService::class)->has($id); - } -} +mapping($config['mapping'] ?? []); + $this->parseInt($config); + $this->parseEvents($config); + $this->initErrorHandler(); + $this->enableEnvConfig(); + parent::__construct(); + } + + + /** + * @param array $mapping + */ + public function mapping(array $mapping) + { + $di = Kiri::getDi(); + $di->mapping(StdoutLoggerInterface::class, StdoutLogger::class); + $di->mapping(LoggerInterface::class, Logger::class); + $di->mapping(Emitter::class, ResponseEmitter::class); + $di->mapping(ResponseInterface::class, Response::class); + $di->mapping(RequestInterface::class, Request::class); + foreach ($mapping as $interface => $class) { + $di->mapping($interface, $class); + } + } + + + /** + * @return array + */ + public function enableEnvConfig(): array + { + if (!file_exists($this->envPath)) { + return []; + } + $lines = $this->readLinesFromFile($this->envPath); + foreach ($lines as $line) { + if (!$this->isComment($line) && $this->looksLikeSetter($line)) { + [$key, $value] = explode('=', $line); + putenv(trim($key) . '=' . trim($value)); + } + } + return $lines; + } + + + /** + * Read lines from the file, auto detecting line endings. + * + * @param string $filePath + * + * @return array + */ + protected function readLinesFromFile(string $filePath): array + { + // Read file into an array of lines with auto-detected line endings +// $autodetect = ini_get('auto_detect_line_endings'); +// ini_set('auto_detect_line_endings', '1'); + // ini_set('auto_detect_line_endings', $autodetect); + + return file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + } + + /** + * Determine if the line in the file is a comment, e.g. begins with a #. + * + * @param string $line + * + * @return bool + */ + protected function isComment(string $line): bool + { + $line = ltrim($line); + + return isset($line[0]) && $line[0] === '#'; + } + + /** + * Determine if the given line looks like it's setting a variable. + * + * @param string $line + * + * @return bool + */ + protected function looksLikeSetter(string $line): bool + { + return str_contains($line, '='); + } + + + /** + * @param $config + * + * @throws + */ + public function parseInt($config) + { + Config::sets($config); + if ($storage = Config::get('storage', 'storage')) { + if (!str_contains($storage, APP_PATH)) { + $storage = APP_PATH . $storage . '/'; + } + if (!is_dir($storage)) { + mkdir($storage); + } + if (!is_dir($storage) || !is_writeable($storage)) { + throw new InitException("Directory {$storage} does not have write permission"); + } + } + } + + /** + * @param $config + * + * @throws + */ + public function parseEvents($config) + { + if (!isset($config['events']) || !is_array($config['events'])) { + return; + } + foreach ($config['events'] as $key => $value) { + if (is_string($value)) { + $value = Kiri::createObject($value); + } + $this->addEvent($key, $value); + } + } + + + /** + * @param $key + * @param $value + * @return void + * @throws InitException + * @throws Exception + */ + private function addEvent($key, $value): void + { + if ($value instanceof \Closure || is_object($value)) { + $this->provider->on($key, $value, 0); + return; + } + if (!is_array($value)) { + return; + } + if (is_object($value[0]) && !($value[0] instanceof \Closure)) { + $this->provider->on($key, $value, 0); + return; + } else if (is_string($value[0])) { + $value[0] = Kiri::createObject($value[0]); + $this->provider->on($key, $value, 0); + return; + } + foreach ($value as $item) { + if (!is_callable($item, true)) { + throw new InitException("Class does not hav callback."); + } + $this->provider->on($key, $item, 0); + } + } + + + /** + * @return mixed + */ + public function getLocalIps(): mixed + { + return swoole_get_local_ip(); + } + + + /** + * @return mixed + */ + public function getFirstLocal(): mixed + { + return current($this->getLocalIps()); + } + + + /** + * + * @return Server + * @throws + */ + public function getServer(): Server + { + return Kiri::getDi()->get(Server::class); + } + + + /** + * @param string $name + * @return mixed|null + * @throws Exception + */ + public function __get(string $name) + { + $localService = Kiri::getDi()->get(LocalService::class); + if ($localService->has($name)) { + return $localService->get($name); + } + return parent::__get($name); // TODO: Change the autogenerated stub + } + + + /** + * @param $id + * @param $definition + */ + public function set($id, $definition): void + { + Kiri::getDi()->get(LocalService::class)->set($id, $definition); + } + + + /** + * @param $id + * @return bool + */ + public function has($id): bool + { + return Kiri::getDi()->get(LocalService::class)->has($id); + } +} diff --git a/kiri-engine/Abstracts/Logger.php b/kiri-engine/Abstracts/Logger.php index e16e6d42..507b1fa3 100644 --- a/kiri-engine/Abstracts/Logger.php +++ b/kiri-engine/Abstracts/Logger.php @@ -137,6 +137,7 @@ class Logger implements LoggerInterface * @param string $message * @param array $context * @throws ConfigException + * @throws Exception */ public function log($level, $message, array $context = []) { @@ -146,8 +147,10 @@ class Logger implements LoggerInterface return; } - $_string = '[' . now() . '] production.' . $level . ': ' . $this->_string($message, $context); - + $_string = '[' . now() . '] production.' . $level . ': ' . $message; + if (!empty($context)) { + $_string .= PHP_EOL . $this->_string($context); + } file_put_contents('php://output', $_string); $filename = storage('log-' . date('Y-m-d') . '.log', 'log/'); @@ -188,21 +191,17 @@ class Logger implements LoggerInterface /** - * @param $message * @param $context * @return string */ - private function _string($message, $context): string + private function _string($context): string { if ($context instanceof \Throwable) { $context = ['file' => $context->getFile(), 'line' => $context->getLine()]; } - if (!empty($context)) { - if (is_array($context) && $context[0] instanceof \Throwable) { - $context = ['file' => $context[0]->getFile(), 'line' => $context[0]->getLine()]; - } - return $message . ' ' . PHP_EOL . print_r($context, true) . PHP_EOL; + if (is_array($context) && $context[0] instanceof \Throwable) { + $context = ['file' => $context[0]->getFile(), 'line' => $context[0]->getLine()]; } - return $message . PHP_EOL; + return print_r($context, true) . PHP_EOL; } } diff --git a/kiri-engine/Abstracts/Provider.php b/kiri-engine/Abstracts/Provider.php index e87c64e7..c2dcf29b 100644 --- a/kiri-engine/Abstracts/Provider.php +++ b/kiri-engine/Abstracts/Provider.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace Kiri\Abstracts; -use Kiri\Application; +use Kiri\Di\LocalService; interface Provider { - public function onImport(Application $application); + public function onImport(LocalService $application); } diff --git a/kiri-engine/Abstracts/Providers.php b/kiri-engine/Abstracts/Providers.php index f0191e50..5c67734e 100644 --- a/kiri-engine/Abstracts/Providers.php +++ b/kiri-engine/Abstracts/Providers.php @@ -4,6 +4,9 @@ declare(strict_types=1); namespace Kiri\Abstracts; +use Exception; +use Kiri\Di\ContainerInterface; + /** * Class Providers * @package Kiri\Abstracts @@ -12,4 +15,14 @@ abstract class Providers extends Component implements Provider { + /** + * @param ContainerInterface $container + * @param array $config + * @throws Exception + */ + public function __construct(public ContainerInterface $container, array $config = []) + { + parent::__construct($config); + } + } diff --git a/kiri-engine/Application.php b/kiri-engine/Application.php deleted file mode 100644 index 8ae147d0..00000000 --- a/kiri-engine/Application.php +++ /dev/null @@ -1,249 +0,0 @@ -> */ - private array $_process = []; - - - /** - */ - public function init() - { - $this->import(ServerProviders::class); - } - - - /** - * @throws - */ - public function withDatabase() - { - $this->import(DatabasesProviders::class); - } - - - /** - * @throws - */ - public function withCrontab() - { - $this->import(CrontabProviders::class); - } - - - /** - * @param string $class - * @param Process $process - */ - public function addProcess(string $class, Process $process) - { - } - - - /** - * @return Process[] - */ - public function getProcess(): array - { - return $this->_process; - } - - - /** - * @param string $class - * @return Process|null - */ - public function getProcessName(string $class): ?Process - { - return $this->_process[$class] ?? null; - } - - - /** - * @param Closure|array $closure - * @return $this - * @throws Exception - */ - public function middleware(Closure|array $closure): static - { - return $this; - } - - - /** - * @param bool $useTree - * @return $this - * @throws Exception - */ - public function setUseTree(bool $useTree): static - { - return $this; - } - - - /** - * @param string $service - * @return $this - * @throws - */ - public function import(string $service): static - { - if (!class_exists($service)) { - return $this; - } - $class = Kiri::getDi()->get($service); - if (method_exists($class, 'onImport')) { - $class->onImport($this); - } - return $this; - } - - - /** - * @param Kernel $kernel - * @return $this - */ - public function commands(Kernel $kernel): static - { - foreach ($kernel->getCommands() as $command) { - $this->register($command); - } - return $this; - } - - - /** - * @param string $command - * @throws - */ - public function register(string $command) - { - di(ConsoleApplication::class)->add(di($command)); - } - - - /** - * @param array $argv - * @return void - */ - public function execute(array $argv): void - { - ini_set('swoole.enable_preemptive_scheduler', 'On'); - ini_set('swoole.enable_library', 'On'); - [$input, $output] = $this->argument($argv); - try { - $console = di(ConsoleApplication::class); - $command = $input->getFirstArgument(); - if (empty($command)) { - $command = 'sw:server'; - } - $command = $console->find($command); - if ($command instanceof Command) { - $this->enableFileChange($command, $input, $output); - } - } catch (\Throwable $exception) { - $output->writeln(jTraceEx($exception)); - } finally { - Timer::clearAll(); - } - } - - - /** - * @param $argv - * @return array - */ - private function argument($argv): array - { - return [new ArgvInput($argv), new ConsoleOutput()]; - } - - - - /** - * @param Command $class - * @param $input - * @param $output - * @return void - * @throws ReflectionException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - * @throws Exception - */ - private function enableFileChange(Command $class, $input, $output): void - { - fire(new OnBeforeCommandExecute()); - - $this->container->setBindings(OutputInterface::class, $output); - - if (!($class instanceof Kiri\Server\ServerCommand)) { - scan_directory(MODEL_PATH,'app\Model'); - } - - $class->run($input, $output); - fire(new OnAfterCommandExecute()); - $output->writeln('ok' . PHP_EOL); - } - - - /** - * @param $className - * @param null $abstracts - * @return stdClass - * @throws Exception - */ - public function make($className, $abstracts = null): stdClass - { - return make($className, $abstracts); - } -} diff --git a/kiri-engine/Core/HashMap.php b/kiri-engine/Core/HashMap.php index d1d98c90..3ac7b218 100644 --- a/kiri-engine/Core/HashMap.php +++ b/kiri-engine/Core/HashMap.php @@ -3,7 +3,7 @@ namespace Kiri\Core; use JetBrains\PhpStorm\Pure; -use ReturnTypeWillChange; +use Kiri\ReturnTypeWillChange; use Traversable; class HashMap implements \ArrayAccess, \IteratorAggregate diff --git a/kiri-engine/Error/ErrorHandler.php b/kiri-engine/Error/ErrorHandler.php index d59cfda6..911b263c 100644 --- a/kiri-engine/Error/ErrorHandler.php +++ b/kiri-engine/Error/ErrorHandler.php @@ -131,7 +131,7 @@ class ErrorHandler extends Component implements ErrorInterface * @return false|string * @throws Exception */ - public function sendError($message, $file, $line, $code = 500): bool|string + public function sendError($message, $file, $line, int $code = 500): bool|string { $path = ['file' => $file, 'line' => $line]; @@ -168,6 +168,6 @@ class ErrorHandler extends Component implements ErrorInterface */ public function writer($message, string $category = 'app') { - Kiri::app()->debug($message, $category); + Kiri::getLogger()->debug($category, [$message]); } } diff --git a/kiri-engine/Error/ErrorInterface.php b/kiri-engine/Error/ErrorInterface.php index 5e602169..0a3d9be3 100644 --- a/kiri-engine/Error/ErrorInterface.php +++ b/kiri-engine/Error/ErrorInterface.php @@ -23,6 +23,6 @@ interface ErrorInterface * @param int $code * @return mixed */ - public function sendError($message, $file, $line, $code = 500): mixed; + public function sendError($message, $file, $line, int $code = 500): mixed; } diff --git a/kiri-engine/Main.php b/kiri-engine/Main.php new file mode 100644 index 00000000..405ec29a --- /dev/null +++ b/kiri-engine/Main.php @@ -0,0 +1,127 @@ +get($service); + if (method_exists($class, 'onImport')) { + $class->onImport($this); + } + return $this; + } + + + /** + * @param Kernel $kernel + * @return $this + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function commands(Kernel $kernel): static + { + foreach ($kernel->getCommands() as $command) { + $this->command($command); + } + return $this; + } + + + /** + * @param string $command + * @return void + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function command(string $command): void + { + $console = $this->container->get(ConsoleApplication::class); + $console->add($this->container->get($command)); + } + + + /** + * @param array $argv + * @return void + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + * @throws ReflectionException + * @throws Exception + */ + public function execute(array $argv): void + { + [$input, $output] = $this->argument($argv); + $console = $this->container->get(ConsoleApplication::class); + $command = $console->find($input->getFirstArgument()); + + fire(new OnBeforeCommandExecute()); + + $command->run($input, $output); + fire(new OnAfterCommandExecute()); + $output->writeln('ok' . PHP_EOL); + } + + + /** + * @param $argv + * @return array + */ + private function argument($argv): array + { + $input = new ArgvInput($argv); + $this->container->setBindings(ArgvInput::class, $input); + + $output = new ConsoleOutput(); + $this->container->setBindings(OutputInterface::class, $output); + + return [$input, $output]; + } +} diff --git a/kiri-task/OnServerTask.php b/kiri-task/OnServerTask.php index aac5242c..7c8741b8 100644 --- a/kiri-task/OnServerTask.php +++ b/kiri-task/OnServerTask.php @@ -37,7 +37,7 @@ class OnServerTask } catch (\Throwable $exception) { $data = jTraceEx($exception); - $this->logger->error('task', [error_trigger_format($exception)]); + $this->logger->error('task', [throwable($exception)]); } finally { $server->finish($data); } @@ -56,7 +56,7 @@ class OnServerTask } catch (\Throwable $exception) { $data = jTraceEx($exception); - $this->logger->error('task', [error_trigger_format($exception)]); + $this->logger->error('task', [throwable($exception)]); } finally { $task->finish($data); }