DEV Community

Hanane Kacemi
Hanane Kacemi

Posted on

2 2

100 days of code - Day 1

Hello,
I decided to participate on "100DaysOfCode" challenge. To start I'm choosing "Create your own PHP Framework" tutorial, available on symfony website : https://symfony.com/doc/current/create_framework/index.html

In the introduction section of this tutorial they asked a question : "why would someone choose to create its own framework instead of using existing ones ?

well, for me, the main raison is : I want to learn more about low level architecture of frameworks.

So, What do we need for this mission :D ?

  • PHP 7.4 or later
  • web server : nginx, apache, php's built in server (I am unsing xampp)
  • OOP knowledge
  • Composer to install third-party component

Part 1 : Http Foundation Component :

When we create a web app, we assume that we will have a communication between a client and the server, the client sends a request and the server returns a response.

In PHP, the request is represented by global variables ($_GET, $_POST, $_FILE, $_COOKIE, $_SESSION…) and the response is generated by functions (echo, header, setcookie, …).

HttpFoundation component replaces these default PHP global variables and functions by an object-oriented layer.

we can add this component to our project via :
composer require symfony/http-foundation

There are two main classes : Request and Response

These are some main functions of Request Class :

$request->getPathInfo(); // the URI being requested (e.g. /about) minus any query parameters

// retrieve GET and POST variables respectively
$request->query->get('foo');
$request->request->get('bar', 'default value if bar does not exist');

// retrieve SERVER variables
$request->server->get('HTTP_HOST');

// retrieves an instance of UploadedFile identified by foo
$request->files->get('foo');

// retrieve a COOKIE value
$request->cookies->get('PHPSESSID');

// retrieve an HTTP request header, with normalized, lowercase keys
$request->headers->get('host');
$request->headers->get('content-type');

$request->getMethod();    // GET, POST, PUT, DELETE, HEAD
$request->getLanguages(); // an array of languages the client accepts
Enter fullscreen mode Exit fullscreen mode

And below are those of Response Class :

$response = new Response();

$response->setContent('Hello world!');
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'text/html');

// configure the HTTP cache headers
$response->setMaxAge(10);
Enter fullscreen mode Exit fullscreen mode

That's all for today,
Feel free to comment for any suggestions/questions
Have a nice day

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️