OOP Layer
Writing web code is about interacting with HTTP. The HTTP specification describes how a client (a browser) interacts with a server. HttpFoundation is replacing the default PHP global variables and functions with an OOP layer.
/*
http_foundation/index.php
The request is represented by global variables ($_GET, $_POST)
The response is generated by functions (echo, header, setcookie)
This HttpFoundation replaces variables and functions with an OOP layer
cd github/php-pages/main/framework/http_foundation/
composer require symfony/http-foundation
php -S localhost:8000
http://localhost:8000/01.php
Hello World
http://localhost:8000/01.php?name=Fabien
Hello Fabien
http://localhost:8000/01.php?name=<script>alert('Hack!');</script>
XSS attempt - fixed
*/
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$request = Request::createFromGlobals(); // from PHP global variables
// $name = $_GET['name'] ?? "Wolrd";
// printf("Hello %s", htmlspecialchars($name, ENT_QUOTES, 'UTF-8'));
$name = $request->get('name', 'Foundation');
$response = new Response(sprintf('Hello %s', htmlspecialchars($name, ENT_QUOTES, 'UTF-8')));
$response->send();
// Response object back to the client
Request Object
With this component you have all the request information.
/*
http_foundation/02.php - Request Object
http://localhost:8000/index2.php?name=Fabien
*/
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
echo $request->get('name', 'World'); // Fabien
echo $request->getPathInfo(); // URI - /
echo $request->request->get('bar'); // POST - null
echo $request->server->get('HTTP_HOST'); // localhost:8000
echo $request->headers->get('host'); // localhost:8000
echo $request->getMethod(); // GET
Response
With a HttpFoundation component you can simulate a response.
/*
http_foundation/03.php - Response simulation
http://localhost:8000/03.php
Page not found - 404
*/
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Response;
$response = new Response();
$response->setStatusCode(404);
$response->headers->set('Content-Type', 'text/html');
$response->setContent(
"Page not found - " . $response->getStatusCode()
);
$response->send();
// Page not found - 404
Last update: 360 days ago