Symfony Complementary modules

Good to know

Objectives of the training

To make the participants acquire the knowledge of the mechanisms of the framework of the different module(s) chosen.


The content is regularly updated to always cover the latest version of Symfony and the modules' components.

The course is presented in the form of a web application project realized by each participant. Practical work takes place throughout the course, which gradually leads participants to correct their mistakes.

The emphasis is on good practices.

Educational material provided

The trainer will distribute the training materials in electronic format at the end of the training.

In addition, the work will result in the creation of a step-by-step versioned web application. Each participant is invited to keep the code of the training project on his machine, which he will have written himself with the help of the trainer, because this code can be used as a technical base for future projects.


In order to fully benefit from the training, participants must have previous professional experience in the following areas

  • object-oriented PHP development
  • use of a relational database
  • specific prerequisites to be determined according to the chosen module(s)

Participants should have a computer with admin rights, allowing them to do the exercises proposed throughout the training, with a LAMP environment including preferably the following elements

  • An internet connection allowing the installation of PHP extensions and packages from packagist and working with ease (if training outside our premises)
  • A mastered IDE (PHPStorm, SublimeText, VSCode, ...)
  • A UNIX shell
  • A currently supported version of PHP (
  • Git installed (useful for composer dependencies)
  • One MySql/MariaDB server per person
  • Administrator rights on the machine

It is advisable to allow participants to use a text editor they feel most comfortable with in order to concentrate on the training. **It is not necessary to install Symfony, this part will be covered during the training.

More generally, if the training takes place on the customer's premises, it is required that a room allowing to welcome all the participants as well as the trainer be reserved during the whole training period. training. A presentation screen (projector or large flat screen TV) must be present in this room to allow participants to view the trainer's screen. A flip chart or erasable board erasable board and an internet connection would also be appreciated.


  1. Symfony forms & validation - 12H

    1. Building Forms

    2. Simple Type

    3. Collection Type

    4. Custom Type

    5. Rendering

    6. Templating

    7. Passing Options to forms

    8. Validating form input

    9. Form Events

    10. Data mapper

    11. Data transformer

    12. Form type extension

    13. CSRF Protection

  2. Hexagonal architecture - 21H

    1. Why ?

    2. Domain / Application / Infrastructure

    3. Deptrack

    4. SOLID Principles

    5. Update Symfony project architecture

    6. How to deal with doctrine and entities

    7. Take advantage of Services aliases

    8. Examples with repositories

    9. How to deal with the security component

    10. The command bus pattern

    11. Extending the domain with events

  3. Mailer - 2H

    1. Configuration

      1. Transport

    2. Creating and Sending messages

      1. Email addresses

      2. Message Headers

      3. Message Content

    3. Twig and CSS content

    4. Embedding Images

    5. Embedding CSS

    6. Mailer Events

    7. Draft Emails

    8. Development & Debbuging

    9. Disabling delivery

    10. Always send to the same Address

    11. How to test email delivery

  4. TWIG Templating - 4H

    1. Rendering a template

      1. In a controller

      2. In a service

      3. Rendering a Template Directly from a Route

    2. Manage assets

      1. Webpack encore

      2. The app variable

    3. Debugging template

      1. The Dump Twig Utilities

      2. Linting twig template

    4. Reusing template contents

      1. Template inheritance and layout

      2. Including Templates

    5. Embedding Controllers

    6. Twig extensions

    7. Common extensions

    8. Create custom extensions

  5. REST API with Sf - 14H

    1. Request / Response

      1. JSON Response

      2. Status codes

    2. Routes naming strategy

    3. Common Headers to take care of

    4. Documentation with Open API

    5. JSON Schema Validation

    6. Serialization

    7. Filter

    8. Sort

    9. Paginate

    10. Trade-offs with meta-libraries

      1. EasyAdminBundle

      2. API Platform

  6. Upgrade Symfony versions - 2H

    1. Observations about the project

    2. Setup a reproducible environment

    3. Audit of the tests stack

    4. Cleanup the code

    5. State of dependencies

    6. Create a roadmap

    7. PHP Stan

    8. Setup a dependencies update workflow

    9. Iterate over updates

    10. Common traps that can lock an update

    11. Define a long term strategy regularly update dependencies

  7. Doctrine - 7H

    1. Migrations

      1. Performing a migration / Reverting to an old migration

    2. Doctrine associations / Relationships

      1. Doctrine associations / Relations

    3. Fixtures

    4. Objects queries

      1. Expression builder

      2. Problème N+1

    5. Test a Doctrine repository

      1. Test a Doctrine repository

    6. Configuration

    7. Object validation

    8. Doctrine extensions

    9. Automatic retrieval of objects (ParamConverter)

    10. Custom type

  8. Security - 14H

    1. The User

    2. Hierarchy of roles

    3. User Provider

    4. The Firewall

    5. Authenticators

      1. Login form

      2. Json login

      3. Basic Http

      4. Custom authenticators (Http cookie only)

    6. JWT

      1. Encode with a passphrase

      2. Encode with RSA key pair

    7. Encode password

      1. Automatically encode a user's password

      2. Migrate a user's password to another encryption method

    8. Security events

    9. Logout

    10. Access control

  9. Messenger - 21H

    1. Creating a message manager

    2. Sending messages

    3. Transport configuration

      1. Synchronous / Asynchronous

      2. Routing messages to a transport

    4. Message consumption

    5. Attempts and failures

    6. Middlewares

    7. Extending Messenger

    8. Handling multiple buses

  10. Mercure - 7h

    1. Installation & Configuration

    2. Basic Usages (Publishing / Subscribing)

    3. Debugging

    4. Discovery

    5. Authorization

    6. Testing

    7. Async dispatching

  11. Console - 4h

  12. Behat with friends-of-behat/symfony-extension - 7h

  13. Good practices to keep the project up-to-date - 2h

  14. Dockerize a Symfony project - 4h

  15. GraphQL API with Symfony - 7h

They recommend our trainings