Http Component
, (*1)
Installation
You can use composer to install this component. The package is:, (*2)
patricklouys/http
Basic Usage
Request
The Request class provides an object oriented wrapper around the PHP superglobals. This makes it possible to inject it as a dependency into any of your classes that require it., (*3)
use Http\HttpRequest;
$request = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));
Now you can use the following methods on the $request
object:, (*4)
$request->getParameter($key, $defaultValue = null);
$request->getFile($key, $defaultValue = null);
$request->getCookie($key, $defaultValue = null);
$request->getParameters();
$request->getQueryParameters();
$request->getBodyParameters();
$request->getRawBody();
$request->getCookies();
$request->getFiles();
$request->getMethod();
$request->getHttpAccept();
$request->getReferer();
$request->getUserAgent();
$request->getIpAddress();
$request->isSecure();
$request->getQueryString();
Please note that both GET and POST parameters are merged together and accessible with getParameter
., (*5)
Response
The HttpResponse
object is the data holder for the HTTP response. It has no constructor dependencies and can be instantiated with just:, (*6)
use Http\HttpResponse;
$response = new HttpResponse;
The response can be modified with following methods:, (*7)
$response->setStatusCode($statusCode, $statusText = null);
$response->addHeader($name, $value);
$response->setHeader($name, $value);
$response->addCookie(Cookie $cookie);
$response->deleteCookie(Cookie $cookie);
$response->setContent($content);
$response->redirect($url);
If you don't supply a status text with setStatusCode
then an appropriate default status text will be selected for the HTTP status code if available., (*8)
addHeader
adds a new header value without overwriting existing values, setHeader
will overwrite an existing value., (*9)
The redirect
method will set the status code and text for a 301 redirect., (*10)
deleteCookie
will set the cookie content to nothing and put the expiration in the past., (*11)
The following two methods are available to send the response to the client:, (*12)
$response->getHeaders();
$response->getContent();
They can be used like this:, (*13)
foreach ($response->getHeaders() as $header) {
header($header, false);
}
echo $response->getContent();
The second parameter of header
must be false. Otherwise existing headers will be overwritten., (*14)
Cookies
To avoid new
calls in your classes and to have the ability to set default cookie settings for you application, there is a CookieBuilder
class that you can use to create your cookie objects. It has the following methods available:, (*15)
$cookieBuilder->setDefaultDomain($domain); // defaults to NULL
$cookieBuilder->setDefaultPath($path); // defaults to '/'
$cookieBuilder->setDefaultSecure($secure); // defaults to TRUE
$cookieBuilder->setDefaultHttpOnly($httpOnly); // defaults to TRUE
$cookieBuilder->build($name, $value); // returns the cookie object
You can use the following methods to manipulate an existing cookie:, (*16)
$cookie->setValue($value);
$cookie->setMaxAge($seconds);
$cookie->setDomain($domain);
$cookie->setPath($path);
$cookie->setSecure($secure);
$cookie->setHttpOnly($httpOnly);
The cookie object can the be used with the HttpResponse
methods addCookie
and deleteCookie
., (*17)
Example
<?php
use Http\HttpRequest;
use Http\HttpResponse;
use Http\CookieBuilder;
$loader = require_once __DIR__ . '/vendor/autoload.php';
$cookieBuilder = new CookieBuilder;
// Disable the secure flag because this is only an example
$cookieBuilder->setDefaultSecure(false);
$request = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));
$response = new HttpResponse;
$content = '
Hello World
';
$content .= $request->getCookie('TestCookie', 'Cookie is not set.');
if ($request->getParameter('setCookie') === 'true') {
$cookie = $cookieBuilder->build('TestCookie', 'Cookie is set.');
$response->addCookie($cookie);
}
$response->setContent($content);
foreach ($response->getHeaders() as $header) {
header($header);
}
echo $response->getContent();