minte9
LearnRemember




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: 167 days ago