- FEATURES
- Autoload
- Class Reflection
- Magic Methods
- Exceptions
- Late Static Binding
- Type Hinting
- SPL
- PHPUNIT
- PHAR
- COMPOSER
- Carbon
- Guzzle
- Faker
- Math
- Requests
- DESIGN PATTERNS
- Singleton Pattern
- Observer Pattern
- Strategy Pattern
- Dependency Injection
- Middleware
- Registry
- SYMFONY
- Routes
- Annotations
- Flex
- Controllers
- Doctrine
- Templating
- VERSIONS
- Php7.4
- Php8.0
- SECURITY
- Filter Input
- Remote Code Injection
- Sql Injection
- Session Fixation
- File Uploads
- Cross Site Scripting
- Spoofed Forms
- CSRF
- Session Hijacking
- MODERN PHP
- Composer
- Autoloader
- Package
- Releases
- Generators
- Dependency Injection
- Middleware
- CUSTOM FRAMEWORK
- App
-
Http Foundation
- Front Controller
- Routing
- Render Controller
- Resolver
- SoC
- FRAMEWORKS
- Slim
- Symfony V5
- Laravel V8
- Laminas V3
- Codeigniter V4
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: 395 days ago