Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[11.x] Fixes Illuminate\Http\Response to output empty string if $content is set to null #53872

Draft
wants to merge 3 commits into
base: 11.x
Choose a base branch
from

Conversation

crynobone
Copy link
Member

  1. Symfony set the content to null for response()->noContent() https://github.com/symfony/http-foundation/blob/e88a66c3997859532bc2ddd6dd8f35aba2711744/Response.php#L246-L249
  2. This cause issue with PSR-7 HTTP Stream in Octane

fixed laravel/octane#972

`$content` is set to `null`

1. Symfony set the content to `null` for `response()->noContent()` https://github.com/symfony/http-foundation/blob/e88a66c3997859532bc2ddd6dd8f35aba2711744/Response.php#L246-L249
2. This cause issue with PSR-7 HTTP Stream in Octane

fixed laravel/octane#972

Signed-off-by: Mior Muhammad Zaki <[email protected]>
Signed-off-by: Mior Muhammad Zaki <[email protected]>
Signed-off-by: Mior Muhammad Zaki <[email protected]>
#[\Override]
public function getContent(): string|false
{
return transform(parent::getContent(), fn ($content) => $content, '');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just?

return parent::getContent() ?? '';

@rodrigopedra
Copy link
Contributor

Also, for the same hash you linked the $this->setContent(null);, setContent() actually uses the null-coalescing operator to convert null to an empty string:

https://github.com/symfony/http-foundation/blob/e88a66c3997859532bc2ddd6dd8f35aba2711744/Response.php#L418-L423

Maybe the problem is something else?

@rodrigopedra
Copy link
Contributor

Does octane calls Illuminate\Http\ResponseTrait@getOriginalContent(), the Response::$original property is stored unchanged, that might be the issue.

@crynobone
Copy link
Member Author

I'm a little hesitant to follow Symfony style since their phpdoc indicate string|null while ours is mixed

Also with mixed we could potentially introduce breaking changes for application that expected that they can directly return null (maybe 🤔)

@rodrigopedra
Copy link
Contributor

I agree, but our override at the end defers to theirs

From our current code null should end up being handled by parent::setContent($content); which already coalesces null to an empty string

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

sync_worker_exec_payload: TypeError: fwrite(): Argument #2 ($data) must be of type string, null given
2 participants