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\StreamResponse;
use Psr\Http\Message\ResponseInterface;
use Swoole\Http\Response;
class ConstrictResponse extends Message implements ResponseInterface
{
@@ -18,11 +20,18 @@ class ConstrictResponse extends Message implements ResponseInterface
private string $reasonPhrase;
/**
* @var array|mixed
*/
public array $headers = [];
/**
* @param ContentType|null $contentType
*/
public function __construct(?ContentType $contentType = null)
{
$this->headers = \config('response.headers', $this->headers);
if ($contentType != null) {
$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
* @return $this
@@ -187,6 +215,10 @@ class ConstrictResponse extends Message implements ResponseInterface
*/
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());
}
}
+10
View File
@@ -68,6 +68,16 @@ class Response implements ResponseInterface
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
+4 -6
View File
@@ -3,16 +3,13 @@ declare(strict_types=1);
namespace Kiri\Router;
use Kiri\Di\Inject\Container;
use Kiri\Di\Interface\ResponseEmitterInterface;
use Kiri\Events\EventDispatch;
use Kiri\Events\EventProvider;
use Kiri\Server\Events\OnAfterRequest;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
use ReflectionException;
use SplPriorityQueue;
use function swoole_version;
/**
@@ -69,6 +66,7 @@ class SwooleHttpResponseEmitter implements ResponseEmitterInterface
*/
private function writeParams(ResponseInterface $proxy, object $response, object $request): void
{
/** @var \Swoole\Http\Response $response */
$response->setStatusCode($proxy->getStatusCode());
$headers = $proxy->getHeaders();
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) {
$response->setCookie(...$cookie);
}
$response->header('Run-Time', $this->getRunTime($request));
$response->header('Run-Time', $this->getRunTime($request) . '');
$response->header('Server', 'swoole');
$response->header('Swoole-Version', \swoole_version());
$response->header('Swoole-Version', swoole_version());
}