Repository navigation
Response could not be converted to string #219
Copy link
Copy link
Closed
Description
PHP Version
8.3.25
Swoole Extension Version
6.0.2
Database Driver & Version
No response
Description
I’m trying to build a package similar to Laravel Fortify, since Hypervel doesn’t have one yet. When I try to return a response class, an error occurs.
Object of class App\\Http\\Responses\\Sample could not be converted to string at method transferToResponse in class Hypervel\\Http\\CoreMiddleware
problem solve when I override that method to
protected function transferToResponse($response, ServerRequestInterface $request): ResponsePlusInterface
{
if ($response instanceof Renderable) {
if ($response instanceof ViewInterface) {
if ($this->container->get(ConfigInterface::class)->get('view.event.enable', false)) {
$this->container->get(EventDispatcherInterface::class)
->dispatch(new ViewRendered($response));
}
}
return $this->response()
->setHeader('Content-Type', $this->container->get(RenderInterface::class)->getContentType())
->setBody(new SwooleStream($response->render()));
}
// Additional code
if ($response instanceof \Hypervel\Support\Contracts\Responsable) {
$hypervelRequest = new \Hypervel\Http\Request($request);
$psrResponse = $response->toResponse($hypervelRequest);
return new ResponsePlusProxy($psrResponse);
}
if (is_string($response)) {
return $this->response()->addHeader('content-type', 'text/plain')->setBody(new SwooleStream($response));
}
if ($response instanceof ResponseInterface) {
return new ResponsePlusProxy($response);
}
if (is_array($response) || $response instanceof Arrayable) {
return $this->response()
->addHeader('content-type', 'application/json')
->setBody(new SwooleStream(Json::encode($response)));
}
if ($response instanceof Jsonable) {
return $this->response()
->addHeader('content-type', 'application/json')
->setBody(new SwooleStream((string) $response));
}
if ($this->response()->hasHeader('content-type')) {
return $this->response()->setBody(new SwooleStream((string) $response));
}
return $this->response()
->addHeader('content-type', 'text/plain')
->setBody(new SwooleStream((string) $response));
}
Steps To Reproduce
I create a response class
<?php
declare(strict_types=1);
namespace App\Http\Responses;
use Hypervel\Http\Request;
use Psr\Http\Message\ResponseInterface;
use Hypervel\Support\Contracts\Responsable;
class Sample implements Responsable
{
public function toResponse(Request $request): ResponseInterface
{
return response()->json([
'success' => true,
'message' => 'Hello from Sample!',
]);
}
}
in controller
/**
* Display a listing of the resource.
*/
public function index()
{
return app(Sample::class);
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
albertcht commentedon Sep 16, 2025
Hey @monoland ,
I can't reproduce this error with your demo code, it worked as expected. And since this is not an issue in Hypervel components, please submit this kind of questions in Discussions, thank you.