HTTP Responses
Basics
Responses are HTTP messages that are sent by servers back to the client. They contain data like the status code, headers, and body.
use Aphiria\Net\Http\Headers;
use Aphiria\Net\Http\HttpStatusCode;
use Aphiria\Net\Http\Response;
use Aphiria\Net\Http\StringBody;
$response = new Response(
HttpStatusCode::Ok, // Can also use an int
new Headers(),
new StringBody('foo')
);
// Get the status code as an HttpStatusCode enum
$response->statusCode;
// Set the status code (can also use an int)
$response->statusCode = HttpStatusCode::InternalServerError;
// Get the reason phrase
$response->reasonPhrase; // "OK"
// Get the protocol version
$response->protocolVersion; // 1.1
// Get the headers (you can add new headers to the returned hash table)
$response->headers;
// Set a header
$response->headers->add('Foo', 'bar');
// Get the body (could be null)
$response->body;
// Set the body
$response->body = new StringBody('foo');
JSON Responses
Aphiria provides an easy way to create common responses. For example, to create a JSON response, use ResponseFormatter
:
use Aphiria\Net\Http\Formatting\ResponseFormatter;
use Aphiria\Net\Http\Response;
$response = new Response();
new ResponseFormatter()->writeJson($response, ['foo' => 'bar']);
This will set the contents of the response, as well as the appropriate Content-Type
headers.
Redirect Responses
You can also create a redirect response:
use Aphiria\Net\Http\Formatting\ResponseFormatter;
use Aphiria\Net\Http\Response;
$response = new Response();
new ResponseFormatter()->redirectToUri($response, 'http://example.com');
Setting Cookies
Cookies are headers that are automatically appended to each request from the client to the server. To set one, use ResponseFormatter
:
use Aphiria\Net\Http\Formatting\ResponseFormatter;
use Aphiria\Net\Http\Headers\Cookie;
use Aphiria\Net\Http\Headers\SameSiteMode;
new ResponseFormatter()->setCookie(
$response,
new Cookie(
name: 'token',
value: 'abc123',
maxAge: 3600,
path: '/',
domain: 'example.com',
isSecure: true, // Defaults to false
isHttpOnly: true, // Defaults to true
sameSite: SameSiteMode::Lax // Defaults to lax
)
);
Use ResponseFormatter::setCookies()
to set multiple cookies at once.
Deleting Cookies
To delete a cookie on the client, call
new ResponseFormatter()->deleteCookie($response, 'userid');
Writing Responses
Once you're ready to start sending the response back to the client, you can use ResponseWriter
:
use Aphiria\Net\Http\ResponseWriter;
new ResponseWriter()->writeResponse($response);
By default, this will write the response to the php://output
stream. You can override the stream it writes to via the constructor:
$outputStream = new Stream(fopen('path/to/output', 'wb'));
new ResponseWriter($outputStream)->writeResponse($response);
Serializing Responses
Aphiria can serialize responses per RFC 7230:
echo (string)$response;