3 Commits

Author SHA1 Message Date
as2252258 0c2462feee eee 2025-07-10 10:30:20 +08:00
as2252258 4c4a21dd7a eee 2025-07-10 09:30:13 +08:00
as2252258 8623a036ed eee 2025-07-08 11:43:04 +08:00
3 changed files with 46 additions and 6 deletions
+32
View File
@@ -7,6 +7,8 @@ use Kiri\Core\Help;
use Kiri\Router\ContentType; use Kiri\Router\ContentType;
use Kiri\Router\StreamResponse; use Kiri\Router\StreamResponse;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use Swoole\Http\Response;
class ConstrictResponse extends Message implements ResponseInterface class ConstrictResponse extends Message implements ResponseInterface
{ {
@@ -18,11 +20,18 @@ class ConstrictResponse extends Message implements ResponseInterface
private string $reasonPhrase; private string $reasonPhrase;
/**
* @var array|mixed
*/
public array $headers = [];
/** /**
* @param ContentType|null $contentType * @param ContentType|null $contentType
*/ */
public function __construct(?ContentType $contentType = null) public function __construct(?ContentType $contentType = null)
{ {
$this->headers = \config('response.headers', $this->headers);
if ($contentType != null) { if ($contentType != null) {
$this->withHeader('Content-Type', $contentType->toString()); $this->withHeader('Content-Type', $contentType->toString());
} }
@@ -30,6 +39,25 @@ class ConstrictResponse extends Message implements ResponseInterface
} }
/**
* @param string $url
* @param array $params
* @param int $statusCode
* @return static
*/
public function redirectTo(string $url, array $params = [], int $statusCode = 302): static
{
if (!empty($params)) {
$url .= '?' . http_build_query($params);
}
$this->withHeader('Location', $url);
$this->withStatus($statusCode);
return $this;
}
/** /**
* @param ContentType $contentType * @param ContentType $contentType
* @return $this * @return $this
@@ -187,6 +215,10 @@ class ConstrictResponse extends Message implements ResponseInterface
*/ */
public function end(object $response): void public function end(object $response): void
{ {
/** @var Response $response */
if (count($this->headers) > 0) foreach ($this->headers as $key => $header) {
$response->header($key, $header);
}
$response->end($this->stream->getContents()); $response->end($this->stream->getContents());
} }
} }
+10
View File
@@ -68,6 +68,16 @@ class Response implements ResponseInterface
return $this->__call__(__FUNCTION__, $content, $statusCode); return $this->__call__(__FUNCTION__, $content, $statusCode);
} }
/**
* @param string $url
* @param array $params
* @param int $statusCode
* @return ResponseInterface
*/
public function redirectTo(string $url, array $params = [], int $statusCode = 302): ResponseInterface
{
return $this->__call__(__FUNCTION__, $url, $params, $statusCode);
}
/** /**
* @param array $content * @param array $content
+4 -6
View File
@@ -3,16 +3,13 @@ declare(strict_types=1);
namespace Kiri\Router; namespace Kiri\Router;
use Kiri\Di\Inject\Container;
use Kiri\Di\Interface\ResponseEmitterInterface; use Kiri\Di\Interface\ResponseEmitterInterface;
use Kiri\Events\EventDispatch; use Kiri\Events\EventDispatch;
use Kiri\Events\EventProvider; use Kiri\Events\EventProvider;
use Kiri\Server\Events\OnAfterRequest; use Kiri\Server\Events\OnAfterRequest;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use ReflectionException;
use SplPriorityQueue; use SplPriorityQueue;
use function swoole_version;
/** /**
@@ -69,6 +66,7 @@ class SwooleHttpResponseEmitter implements ResponseEmitterInterface
*/ */
private function writeParams(ResponseInterface $proxy, object $response, object $request): void private function writeParams(ResponseInterface $proxy, object $response, object $request): void
{ {
/** @var \Swoole\Http\Response $response */
$response->setStatusCode($proxy->getStatusCode()); $response->setStatusCode($proxy->getStatusCode());
$headers = $proxy->getHeaders(); $headers = $proxy->getHeaders();
if (count($headers) > 0) foreach ($headers as $name => $header) { if (count($headers) > 0) foreach ($headers as $name => $header) {
@@ -78,9 +76,9 @@ class SwooleHttpResponseEmitter implements ResponseEmitterInterface
if (count($cookieParams) > 0) foreach ($cookieParams as $cookie) { if (count($cookieParams) > 0) foreach ($cookieParams as $cookie) {
$response->setCookie(...$cookie); $response->setCookie(...$cookie);
} }
$response->header('Run-Time', $this->getRunTime($request)); $response->header('Run-Time', $this->getRunTime($request) . '');
$response->header('Server', 'swoole'); $response->header('Server', 'swoole');
$response->header('Swoole-Version', \swoole_version()); $response->header('Swoole-Version', swoole_version());
} }