This commit is contained in:
2023-12-18 22:23:17 +08:00
parent 7c0ab8c639
commit a51b666303
13 changed files with 67 additions and 141 deletions
+5 -8
View File
@@ -3,14 +3,12 @@ declare(strict_types=1);
namespace Kiri\Router\Annotate; namespace Kiri\Router\Annotate;
use Kiri\Di\Interface\InjectMethodInterface;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass;
use ReflectionException;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Delete extends AbstractRequestMethod implements InjectRouteInterface class Delete extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -24,14 +22,13 @@ class Delete extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws ReflectionException
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = \Kiri::getDi()->makeReflection($class); $controller = \Kiri::getDi()->get($class);
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
+5 -10
View File
@@ -3,16 +3,12 @@ declare(strict_types=1);
namespace Kiri\Router\Annotate; namespace Kiri\Router\Annotate;
use Exception; use Kiri\Di\Interface\InjectMethodInterface;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\OptionsController;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass;
use ReflectionException;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Get extends AbstractRequestMethod implements InjectRouteInterface class Get extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -26,14 +22,13 @@ class Get extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws ReflectionException
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = \Kiri::getDi()->makeReflection($class); $controller = \Kiri::getDi()->get($class);
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
+5 -8
View File
@@ -5,13 +5,11 @@ namespace Kiri\Router\Annotate;
use Kiri; use Kiri;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface; use Kiri\Di\Interface\InjectMethodInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass;
use ReflectionException;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Head extends AbstractRequestMethod implements InjectRouteInterface class Head extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -25,14 +23,13 @@ class Head extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws ReflectionException
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = Kiri::getDi()->makeReflection($class); $controller = Kiri::getDi()->get($class);
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
if (!empty($this->version)) { if (!empty($this->version)) {
+4 -5
View File
@@ -4,11 +4,10 @@ declare(strict_types=1);
namespace Kiri\Router\Annotate; namespace Kiri\Router\Annotate;
use Kiri\Router\Interface\InjectRouteInterface; use Kiri\Di\Interface\InjectMethodInterface;
use ReflectionClass;
#[\Attribute(\Attribute::TARGET_METHOD)] #[\Attribute(\Attribute::TARGET_METHOD)]
class Interceptor implements InjectRouteInterface class Interceptor implements InjectMethodInterface
{ {
public function __construct() public function __construct()
@@ -17,11 +16,11 @@ class Interceptor implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
} }
+5 -6
View File
@@ -3,12 +3,11 @@ declare(strict_types=1);
namespace Kiri\Router\Annotate; namespace Kiri\Router\Annotate;
use Kiri\Di\Interface\InjectMethodInterface;
use Kiri\Router\Base\Middleware as MiddlewareManager; use Kiri\Router\Base\Middleware as MiddlewareManager;
use Kiri\Router\Interface\InjectRouteInterface;
use ReflectionClass;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Middleware implements InjectRouteInterface class Middleware implements InjectMethodInterface
{ {
/** /**
@@ -20,15 +19,15 @@ class Middleware implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$middlewareManager = \Kiri::getDi()->get(MiddlewareManager::class); $middlewareManager = \Kiri::getDi()->get(MiddlewareManager::class);
$middlewareManager->set($class->getName(), $method, $this->middleware); $middlewareManager->set($class, $method, $this->middleware);
} }
+4 -5
View File
@@ -5,12 +5,11 @@ namespace Kiri\Router\Annotate;
use Kiri; use Kiri;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass; use Kiri\Di\Interface\InjectMethodInterface;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Options extends AbstractRequestMethod implements InjectRouteInterface class Options extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -29,9 +28,9 @@ class Options extends AbstractRequestMethod implements InjectRouteInterface
* @return void * @return void
* @throws * @throws
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = Kiri::getDi()->makeReflection($class); $controller = Kiri::getDi()->get($class);
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
+5 -8
View File
@@ -5,13 +5,11 @@ namespace Kiri\Router\Annotate;
use Kiri; use Kiri;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass; use Kiri\Di\Interface\InjectMethodInterface;
use ReflectionException;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Post extends AbstractRequestMethod implements InjectRouteInterface class Post extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -25,15 +23,14 @@ class Post extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws ReflectionException
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$controller = Kiri::getDi()->makeReflection($class); $controller = Kiri::getDi()->get($class);
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
if (!empty($this->version)) { if (!empty($this->version)) {
+8 -7
View File
@@ -5,12 +5,14 @@ namespace Kiri\Router\Annotate;
use Kiri; use Kiri;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass; use Kiri\Di\Interface\InjectMethodInterface;
/**
*
*/
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Put extends AbstractRequestMethod implements InjectRouteInterface class Put extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -24,14 +26,13 @@ class Put extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param object $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = Kiri::getDi()->makeReflection($class); $controller = Kiri::getDi()->get($class);
// TODO: Implement dispatch() method. // TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
if (!empty($this->version)) { if (!empty($this->version)) {
+5 -9
View File
@@ -3,13 +3,11 @@
namespace Kiri\Router\Annotate; namespace Kiri\Router\Annotate;
use Kiri\Router\Constrict\RequestMethod; use Kiri\Router\Constrict\RequestMethod;
use Kiri\Router\Interface\InjectRouteInterface;
use Kiri\Router\Router; use Kiri\Router\Router;
use ReflectionClass; use Kiri\Di\Interface\InjectMethodInterface;
use ReflectionException;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class Route extends AbstractRequestMethod implements InjectRouteInterface class Route extends AbstractRequestMethod implements InjectMethodInterface
{ {
@@ -24,15 +22,13 @@ class Route extends AbstractRequestMethod implements InjectRouteInterface
/** /**
* @param ReflectionClass $class * @param string $class
* @param string $method * @param string $method
* @return void * @return void
* @throws ReflectionException
*/ */
public function dispatch(ReflectionClass $class, string $method): void public function dispatch(string $class, string $method): void
{ {
$controller = \Kiri::getDi()->makeReflection($class); $controller = \Kiri::getDi()->get($class);
// TODO: Implement dispatch() method.
$path = '/' . ltrim($this->path, '/'); $path = '/' . ltrim($this->path, '/');
if (!empty($this->version)) { if (!empty($this->version)) {
$path = '/' . trim($this->version) . $path; $path = '/' . trim($this->version) . $path;
+17 -53
View File
@@ -3,65 +3,29 @@
namespace Kiri\Router\Aspect; namespace Kiri\Router\Aspect;
use Kiri\Di\Interface\InjectProxyInterface; use Kiri\Di\Interface\InjectMethodInterface;
use PhpParser\ParserFactory; use PhpParser\ParserFactory;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS)] #[\Attribute(\Attribute::TARGET_METHOD)]
class Aspect implements InjectProxyInterface class Aspect implements InjectMethodInterface
{ {
/** /**
* @param array|string $aspect * @param array|string $aspect
*/ */
public function __construct(readonly public array|string $aspect = []) public function __construct(readonly public array|string $aspect = [])
{ {
} }
/** /**
* @param string $fileName * @param string $class
* @param object $class * @param string $method
* @param string $method * @return void
* @return void */
*/ public function dispatch(string $class, string $method): void
public function dispatch(string $fileName, object $class, string $method): void {
{ }
// TODO: Implement dispatch() method.
try {
$parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
$ast = $parser->parse(file_get_contents($fileName));
$cacheFile = storage('proxy_functions.php');
if (!file_exists($cacheFile)) {
file_put_contents($cacheFile, '<?php' . PHP_EOL);
}
$functionName = str_replace('\\', '_', $class::class) . '_' . $method;
$code = $this->generateClourse($functionName) . PHP_EOL;
file_put_contents($cacheFile, $code, FILE_APPEND);
} catch (\Throwable $throwable) {
die(throwable($throwable));
}
}
private function generateClourse($functionName): string
{
return <<<PHP
if (!function_exists($functionName)) {
/**
* @param mixed \$message
* @param string \$method
* @throws Exception
*/
function $functionName(mixed \$message, string \$method = 'app')
{
}
}
PHP;
}
} }
-19
View File
@@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
namespace Kiri\Router\Interface;
use ReflectionClass;
interface InjectRouteInterface
{
/**
* @param ReflectionClass $class
* @param string $method
* @return void
*/
public function dispatch(ReflectionClass $class, string $method): void;
}
+4 -2
View File
@@ -7,7 +7,6 @@ use Kiri\Di\Inject\Config;
use Kiri\Di\Inject\Container; use Kiri\Di\Inject\Container;
use Kiri\Di\Interface\InjectParameterInterface; use Kiri\Di\Interface\InjectParameterInterface;
use Kiri\Router\Base\Middleware; use Kiri\Router\Base\Middleware;
use Kiri\Router\Validator\RequestFilter\RequestFilterInterface;
use Kiri\Router\Validator\Types\ArrayProxy; use Kiri\Router\Validator\Types\ArrayProxy;
use Kiri\Router\Validator\Types\BoolProxy; use Kiri\Router\Validator\Types\BoolProxy;
use Kiri\Router\Validator\Types\FloatProxy; use Kiri\Router\Validator\Types\FloatProxy;
@@ -19,8 +18,11 @@ use Kiri\Server\ServerInterface;
use ReflectionNamedType; use ReflectionNamedType;
use ReflectionProperty; use ReflectionProperty;
use ReflectionUnionType; use ReflectionUnionType;
use function inject;
/**
*
*/
#[\Attribute(\Attribute::TARGET_PARAMETER)] #[\Attribute(\Attribute::TARGET_PARAMETER)]
class BindForm implements InjectParameterInterface class BindForm implements InjectParameterInterface
{ {
-1
View File
@@ -3,7 +3,6 @@
namespace Kiri\Router\Validator; namespace Kiri\Router\Validator;
use Kiri; use Kiri;
use Kiri\Router\Interface\ValidatorInterface;
use Kiri\Router\Validator\RequestFilter\BetweenValidatorFilter; use Kiri\Router\Validator\RequestFilter\BetweenValidatorFilter;
use Kiri\Router\Validator\RequestFilter\InValidatorFilter; use Kiri\Router\Validator\RequestFilter\InValidatorFilter;
use Kiri\Router\Validator\RequestFilter\LengthValidatorFilter; use Kiri\Router\Validator\RequestFilter\LengthValidatorFilter;