改名
This commit is contained in:
@@ -35,6 +35,7 @@ class Loader extends BaseObject
|
||||
/**
|
||||
* @param $path
|
||||
* @param $namespace
|
||||
* @throws ComponentException
|
||||
*/
|
||||
public function loader($path, $namespace)
|
||||
{
|
||||
|
||||
@@ -5,6 +5,11 @@ namespace Annotation\Route;
|
||||
|
||||
|
||||
use Annotation\Attribute;
|
||||
use HttpServer\HttpFilter;
|
||||
use ReflectionException;
|
||||
use Snowflake\Exception\ComponentException;
|
||||
use Snowflake\Exception\NotFindClassException;
|
||||
use Snowflake\Snowflake;
|
||||
|
||||
/**
|
||||
* Class Filter
|
||||
@@ -15,9 +20,9 @@ use Annotation\Attribute;
|
||||
|
||||
/**
|
||||
* Filter constructor.
|
||||
* @param string $uri
|
||||
* @param array $rules
|
||||
*/
|
||||
public function __construct(public string $uri)
|
||||
public function __construct(public array $rules)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -25,10 +30,18 @@ use Annotation\Attribute;
|
||||
/**
|
||||
* @param array $handler
|
||||
* @return array
|
||||
* @throws ReflectionException
|
||||
* @throws ComponentException
|
||||
* @throws NotFindClassException
|
||||
*/
|
||||
public function execute(array $handler): array
|
||||
{
|
||||
// TODO: Implement execute() method.
|
||||
[$class, $method] = $handler;
|
||||
|
||||
/** @var HttpFilter $filter */
|
||||
$filter = Snowflake::app()->get('filter');
|
||||
$filter->register(get_class($class), $method, $this->rules);
|
||||
|
||||
return $handler;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace HttpServer;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Snowflake\Abstracts\BaseObject;
|
||||
use validator\Validator;
|
||||
|
||||
/**
|
||||
* Class HttpFilter
|
||||
* @package HttpServer\Http
|
||||
*/
|
||||
class HttpFilter extends BaseObject
|
||||
{
|
||||
|
||||
|
||||
private array $hash = [];
|
||||
|
||||
|
||||
/**
|
||||
* @param string $className
|
||||
* @param string $method
|
||||
* @param array $rules
|
||||
* @return $this
|
||||
*/
|
||||
public function register(string $className, string $method, array $rules): HttpFilter
|
||||
{
|
||||
$this->hash[$className . '::' . $method] = $rules;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $className
|
||||
* @param string $method
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
public function check(string $className, string $method): bool|Validator
|
||||
{
|
||||
if (!isset($this->hash[$className . '::' . $method])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$rules = $this->hash[$className . '::' . $method][request()->getMethod()] ?? [];
|
||||
if (empty($rules)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$validator = Validator::getInstance();
|
||||
$validator->setParams(Input()->load());
|
||||
foreach ($rules as $Key => $val) {
|
||||
$field = array_shift($val);
|
||||
if (empty($val)) {
|
||||
continue;
|
||||
}
|
||||
$validator->make($field, $val);
|
||||
}
|
||||
return $validator;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ use HttpServer\Controller;
|
||||
use HttpServer\Http\Request;
|
||||
use Exception;
|
||||
|
||||
use HttpServer\HttpFilter;
|
||||
use HttpServer\IInterface\After;
|
||||
use HttpServer\IInterface\Interceptor;
|
||||
use HttpServer\IInterface\Limits;
|
||||
@@ -24,6 +25,7 @@ use Snowflake\Exception\ComponentException;
|
||||
use Snowflake\Exception\NotFindClassException;
|
||||
use Snowflake\Snowflake;
|
||||
use Throwable;
|
||||
use validator\Validator;
|
||||
use function Input;
|
||||
|
||||
/**
|
||||
@@ -563,6 +565,31 @@ class Node extends HttpService
|
||||
if (empty($this->callback)) {
|
||||
return Json::to(404, $this->errorMsg());
|
||||
}
|
||||
return $this->httpFilter(...func_get_args());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
* @throws ComponentException
|
||||
* @throws NotFindClassException
|
||||
* @throws ReflectionException
|
||||
* @throws Exception
|
||||
*/
|
||||
private function httpFilter(): mixed
|
||||
{
|
||||
if (!is_array($this->handler)) {
|
||||
return $this->runWith(...func_get_args());
|
||||
}
|
||||
[$class, $method] = $this->handler;
|
||||
|
||||
/** @var HttpFilter $filter */
|
||||
$filter = Snowflake::app()->get('filter');
|
||||
$validator = $filter->check(get_class($class), $method);
|
||||
if ($validator instanceof Validator && !$validator->validation()) {
|
||||
return Json::to(401, $validator->getError());
|
||||
}
|
||||
|
||||
return $this->runWith(...func_get_args());
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ use Exception;
|
||||
use HttpServer\Client\Http2;
|
||||
use HttpServer\Http\Request;
|
||||
use HttpServer\Http\Response;
|
||||
use HttpServer\HttpFilter;
|
||||
use HttpServer\Route\Router;
|
||||
use HttpServer\Server;
|
||||
|
||||
@@ -292,10 +293,10 @@ abstract class BaseApplication extends Service
|
||||
|
||||
|
||||
/**
|
||||
* @throws ComponentException
|
||||
* @return SRedis
|
||||
* @throws NotFindClassException
|
||||
* @throws ReflectionException
|
||||
* @return SRedis
|
||||
* @throws ComponentException
|
||||
*/
|
||||
public function getRedisFromPool(): SRedis
|
||||
{
|
||||
@@ -443,6 +444,7 @@ abstract class BaseApplication extends Service
|
||||
'redis' => ['class' => Redis::class],
|
||||
'jwt' => ['class' => Jwt::class],
|
||||
'async' => ['class' => Async::class],
|
||||
'filter' => ['class' => HttpFilter::class],
|
||||
'object' => ['class' => ObjectPool::class],
|
||||
'goto' => ['class' => BaseGoto::class],
|
||||
'http2' => ['class' => Http2::class],
|
||||
|
||||
Reference in New Issue
Block a user