Symfony request tutorial shows how to work with request objects in Symfony. We show several ways how to create request objects in Symfony.
Symfony
Symfony is a set of reusable PHP components and a PHP framework for web projects. Symfony was published as free software in 2005. The original author of Symfony is Fabien Potencier. The development of the framework is sponsored by a Frech company Sensio Labs.
Symfony HttpFoundation component
Symfony HttpFoundation component defines an object-oriented layer for the HTTP specification. The component represents the request/response process in an object-oriented manner. On the lowest level, we have PHP global variables such as $_GET, $_POST, or $_FILES. These are represented by a Request object. And the response is represented by an Response
object.
Symfony request example
In the following example, we create three different requests using links.
$ symfony new symreq
With composer
, we create a new Symfony skeleton project.
$ cd symreq
We go to the project directory.
$ composer req annot twig
We install modules annotations
and twig
.
$ composer req maker --dev
We install the maker component.
$ php bin/console make:controller HomeController
A HomeController
is created.
src/Controller/HomeController.php
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class HomeController extends AbstractController { /** * @Route("/", name="home") */ public function index() { return $this->render('home/index.html.twig'); } }
The HomeController
returns a home page that contains the anchor tags.
templates/home/index.html.twig
{% extends 'base.html.twig' %} {% block title %}Home page{% endblock %} {% block body %} <ul> <li><a href="/myapp?colour=yellow&day=Saturday">First request</a></li> <li><a href="/myapp2?colour=green&day=Sunday">Second request</a></li> <li><a href="/myapp3?colour=red&day=Monday">Third request</a></li> </ul> {% endblock %}
The HomeController
returns a home page that contains three links. Each of the links has two query parameters. They point to different controller methods.
{% extends 'base.html.twig' %}
The template inherits from the base.html.twig
file, which has a base markup that will be shared.
templates/base.html.twig
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{% block title %}Welcome!{% endblock %}</title> {% block stylesheets %}{% endblock %} </head> <body> {% block body %}{% endblock %} </body> </html>
The base.html.twig
the template contains code that is shared by other template files. It defines blocks that will be replaced in children’s templates.
$ php bin/console make:controller MyappController
A MyappController
is created.
src/Controller/MyappController.php
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class MyappController extends AbstractController { /** * @Route("/myapp", name="myapp") */ public function process() { $request = Request::createFromGlobals(); $col = $request->query->get("colour"); $day = $request->query->get("day"); $content = "Colour: $col, day: $day"; return new Response($content); } /** * @Route("/myapp2", name="myapp2") */ public function process2() { $request = new Request( $_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER ); $col = $request->query->get("colour"); $day = $request->query->get("day"); $content = "Colour: $col, day: $day"; return new Response($content); } /** * @Route("/myapp3", name="myapp3") */ public function process3(Request $request) { $data = $request->query->all(); $col = $data["colour"]; $day = $data["day"]; $content = "Colour: $col, day: $day"; return new Response($content); } }
The MyappController
processes the three GET requests created by the links.
$request = Request::createFromGlobals(); $col = $request->query->get("colour"); $day = $request->query->get("day");
The request object is created with Request::createFromGlobals()
. The GET parameters are retrieved with the get()
method.
$request = new Request( $_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER );
In the second case, the request is created with a new
keyword. It is passed the PHP global variables.
public function process3(Request $request) { $data = $request->query->all(); ...
In the third case, the request object is injected using Symfony’s dependency injection. We get all parameters from the request with the all()
method.
$col = $data["colour"]; $day = $data["day"];
From the array, we get the values.
$content = "Colour: $col, day: $day"; return new Response($content);
We build the content and return a Response
object.
$ symfony serve
We start the web server and locate to http://localhost:8000
.
In this tutorial, we have worked with requests in Symfony.