Web Development


Symfony 4 & 5 Web Development Guide: Beginner To Advanced

Master Symfony PHP framework: from theory, through simple crud app, up to creating an advanced Real Life Application

4.42 (930 reviews)


24.5 hours


Nov 2020

Last Update
Regular Price

What you will learn

You will learn Symfony 4 & 5 from theory to advanced level by creating real life projects

You will create two apps: simple crud app and an advanced video sharing service with PayPal integration, deployment to Heroku etc.

You will learn how to create multilevel nested categories tree in PHP

You will learn how to install Symfony

You will learn about Symfony configuration

You will learn about Symfony Flex

You will learn about HTTP processing workflow in Symfony framework

You will learn routes

You will learn controllers

You will learn views in Symfony using Twig

You will learn html forms in Symfony

You will learn Doctrine ORM (how to use database)

You will learn entities (models) in Symfony and relations between them

You will learn about service container & services in Symfony

You will learn dependency injection (autowiring in Symfony)

You will learn console command

You will learn how to create events and listeners

You will learn how to use sessions & cookies in Symfony

You will learn how to send emails

You will learn how to do translations in Symfony

You will learn about security concepts in Symfony (login, registration, etc.)

You will learn unit & functional testing

You will learn about debugging Symfony applications

You will learn about cache

You will learn how to use Redis for session and cache

You will learn about doctrine table inheritance in Symfony & polymorphic database queries

You will learn how to deploy a Symfony application to Heroku (make application online)

You will learn how to integrate PayPal with the Symfony application for making subscription billing

You will learn how to use external API (Vimeo api) and use it with the Symfony application

You will be able to create your own websites or web applications in Symfony framework

You will learn basics of RabbitMQ message broker

You will learn basics of Messenger Component

You will learn CQRS pattern - command query responsibility segregation

You will learn REST API with Symfony & API Platform


Welcome to the best course of Symfony (incl. 4 & 5 version) - the great PHP framework!

In this course you will learn Symfony from basic to advanced level!

By the end of this course you will be able to create both simple websites and complex dynamic web applications in the great Symfony PHP framework.

Very practical course! Almost all sections/concepts are explained using real life applications/scenarios. In this course we will create a huge real life app (probably you will not find a course where built more advanced  app like in this course)

This is a very massive guide to Symfony, which is one of the most popular PHP frameworks. Symfony 4 version introduced a new approach to php frameworks - it starts small as a microframework and grows as you need new features. You install them using the amazing Symfony Flex tool. For example, if you are making a simple website and do not need a login functionality then there is no code responsible for logging in the framework directory. Thanks to this our application contains only as much as we really need.



The course consist of three main parts:

1. The theoretical part where I discuss the basic Symfony concepts on examples with effects on a web browser

2. In the second part we will build a simple application in Symfony - a list of tasks to be performed (database used)

3. In part 3 we will build an advanced web application for video subscription in which we integrate PayPal for payments, multi-level nested video categories, communication with Vimeo API, deployment to Heroku server

as well as:

BONUS section added (October 2019) - basics of Symfony Messenger Component, RabbitMQ message broker and CQRS pattern (Command Query Responsibility Segregation) with practical example by simulating e-commerce system consisting of main app and cooperating microservices.

Course update: (January 2020) new section added REST API with Symfony & API Platform


During the course we will be covering many simple and advanced Symfony concepts such as: routing, controllers, views, database with doctrine orm, entities and relationships between them: one to one, one to many and many to many; events & listeners, security topics such as login, registration, authorization; also unit and functional testing, dependency injection, service container, symfony services, doctrine table inheritance with polymorphic database queries, REST API and many more.

This course is a combination of theory and project-based learning approach. Learning by building real projects is the best way to learn programming languages and tools like php frameworks.

All of the course applications were made using Symfony 4 (except applications for rest api section - Symfony 5). Upgrade to Symfony 5 section was added to the course. According to Symfony standard, there are no any new features in Symfony 5.0 compared to Symfony 4.4.

Remember that only practice makes perfect. If necessary, study the course two or more times. Take notes  during the course like a real student. Use documentations, Google search. Finally, try to write the application yourself, not necessarily the same as in the course, you can try to change, add something, etc. No single course will make you a very good web developer. It can only bring you closer to this goal. The more practice, the better.




You used Symfony 4 and Symfony 5 in this course for creating apps to practice knowledge. Why not use only the latest version? Does it mean that this course is outdated and I will not benefit from it?


Absolutely not! In tools like PHP frameworks the fundamentals and base syntax almost never change regardless of the version. But of course any maintained software evolves all the time. That's why I always suggest you to use the version of software that instructor uses in the course. It prevents from errors and confusions. As a someone who wants to learn web development you should be aware, that real web development involves also adapting the code to newer versions if necessary - but this is not always necessary, not every company do that. Software changes so often that the instructors would not be able to create the courses so that they match the latest version. This is not even advisable, because as a student you would loose an important aspect of real web development - the awareness that everything is changing and you need to be able to deal with it.


Enroll now and let's start learning Symfony!

There is no risk! 30 day money back guarantee (as always at Udemy)


Symfony 4 & 5 Web Development Guide: Beginner To Advanced
Symfony 4 & 5 Web Development Guide: Beginner To Advanced
Symfony 4 & 5 Web Development Guide: Beginner To Advanced
Symfony 4 & 5 Web Development Guide: Beginner To Advanced



Welcome to the course

About Symfony

Tools and requirements for students

How to use the course

Course applications overview

Quick note about coding standards

How to get helped

Symfony 4 & 5 basics, installation & configuration

Symfony 4 installation & requirements

Symfony 4 configuration

Installing libraries with Symfony Flex

Request & response objects, HTTP processing workflow

Theory - Symfony 4 & 5 core features

Before you start watching this section of the Symfony course




Entities (models)

Service container & services - part 1

Service container & services - part2

Advanced routes

Flash messages



POST & GET data

Custom error pages

Handle exceptions

Binding services to controllers

More features in controllers

Views - tags, filters, functions, tests, operators

Views - genereate url's and escaping strings

Views - global variables

Views - Webpack Encore

Views - using app variable

Views - embed controllers in view

Doctrine crud - create

Doctrine crud - read

Doctrine crud - update

Doctrine crud - delete

Doctrine raw queries

Doctrine param converter

Doctrine LifecycleCallbacks option

Doctrine one-to-many & many-to-one relationships

Doctrine database relationships - cascade remove ralated objects

Doctrine one-to-one relationship

Doctrine many-to-many self referencing relationship

Doctrine Query Builder & eager loading

Doctrine table inheritance mapping in Symfony (polymorphic queries) - part 1

Doctrine table inheritance mapping in Symfony (polymorphic queries) - part 2

Doctrine table inheritance mapping in Symfony (polymorphic queries) - part 3

Service parameters

Service & autowiring by constructor injection and service arguments

Service configuration

Services - setter injection for optional dependencies

Services - property injection

Install composer package before the next lecture

Services - lazy services

Service - aliases

Service - tags

Service - dealing with different implementations of a service

Services list

Cache - basic usage

Cache - tags

Symfony console

Use profiler tool in Symfony

Environments vs kernels

Deploy Symfony application

Events & Listeners base concepts

Create listener

Dispatching events

Create subscriber

Subscriber - many events handled by one subscriber

Subscriber - events priorities

Form - create a class

Form - render in view

Form - themes

Form - send

Form - validation

Form - events

Form - fields not related to entity

Form - upload files

Email - install email package & send an email

Email - spooling

Email - functional testing

Security - create user

Security - register

Security - login

Security - logout

Security - login & remember login state

Security - csrf

Security - use security checker

Install expression-language package

Security - authorization using annotations

Security - authorization using configuration file

Security - authorization using denyAccessUnlessGranted method

Security - authorization in view files

Security - authorization using voters

Unit tests - install

Unit tests - first unit test

Functional tests - install

Functional & unit tests - common assertions

Functional tests - click links

Functional tests - send a form

Functional tests - data providers

Functional tests - tests in isolation

Tests - mock objects

Tests - code coverage report

Translations - install a package

Translations - views

Translations - controllers

Translations - routes

Translations - pluralization

First application in Symfony: to-do list app (CRUD)

Before you start watching this section of the Symfony course

Installation and creating virtual host (To-Do App)

Move html template to Symfony (To-Do App)

Create controller methods (To-Do App)

Make entity in Symfony and use it (To-Do App)

Display list of all tasks on the website (To-Do App)

Switch status of a task (To-Do App)

Delete a task (To-Do App)

Controllers, routes, views - install and move html template to Symfony (App)

Before you start watching this section of the Symfony course

Installation of Symfony 4 framework and moving template to it

Continue with moving html template to Symfony

Make template links working in Symfony - part 1

Make template links working in Symfony - part 2

Make template links working in Symfony - part 3

Make template links working in Symfony - part 4

Make template links working in Symfony - part 5

Install Webpack-Encore

Doctrine entities, relations, fixtures,console commands - video categories (App)

Category entity (model)

Continue with Category fixtures - part 1

Continue with Category fixtures - part 2

Display main categories on website

Create custom Twig filter

Category class for front-end

Build php array for nested categories

Create nested categories on front-page

Finish displaying categories on front-page

Display categories in admin area - part 1

Display categories in admin area - part 2

Edit category in admin panel - part 1

Edit category in admin panel - part 2

Edit category in admin panel - part 3

Edit category in admin panel - part 4

Edit category in admin panel - part 5

First unit tests, mocking classes (Symfony App)

Unit testing of categories - part 1

Unit testing of categories - part 2

Unit testing of categories - part 3

Unit testing of categories - part 4

Unit testing of categories - part 5

First functional tests with isolation (Symfony App)

Functional testing of categories - part 1

Functional testing of categories - part 2

Functional testing of categories - part 3

Functional testing of categories - part 4

Paginate, sort and search - videos on the website and test it (Symfony App)

Create video fixtures

Videos on front-page


Display videos from child categories

Sort videos

Search results

Functional testing of videos - part 1

Functional testing of videos - part 2

Functional testing of videos - part 3

Login and authorization system, sample user data - fixtures (Symfony App)

Symfony login system - part 1

Symfony login system - part 2

Symfony login system - part 3

Symfony login system - part 4

User roles - part 1

User roles - part 2

User roles - part 3

Display links for users depending on login status - part 1

Display links for users depending on login status - part 2

Securing access to superadmin pages

Check security

Html forms, register new users (Symfony App)

User registration - part 1

User registration - part 2

User registration - part 3

Other functional tests (Symfony App)

Functional testing of categories - part 1

Functional testing of categories - part 2

Functional testing - accessing url's - part 1

Functional testing - accessing url's - part 2

Doctrine and LifecycleCallbacks, repositories - comments on videos (Symfony App)

Comments functionality

Comment fixtures

Dynamic value of comments number

Display video details

Display comment details

Create new comment

Functional testing

Functional testing of comments

Many-to-many Doctrine relation - likes/dislikes functionality (Symfony App)

Video entity

Fixtures for videos

Display likes/dislikes - part 1

Display likes/dislikes - part 2

Display likes/dislikes - part 3

Display likes/dislikes - part 4

Sort by likes - part 1

Sort by likes - part 2

Improve searching

List videos in admin panel

Improve functional testing

Functional testing of likes - part 1

Functional testing of likes - part 2

Functional testing of likes - part 3

Code refactoring - part 1

Code refactoring - part 2

Doctrine database relations & Redis for session - video subscriptions (App)

Subscription functionality - part 1

Subscription functionality - part 2

Admin profile

Create video placeholder functionality

Code refactoring

Install Redis

Register new users with choosing video subscription plan (Symfony App)

Register with proper subscription plan - part 1

Register with proper subscription plan - part 2

Register with proper subscription plan - part 3

Register with proper subscription plan - part 4

Enable cascade deletion of videos and comments

Functional testing of subscription

Flash messages, update user profile using Doctrine (Symfony App)

Delete admin profile

Update admin profile - part 1

Update admin profile - part 2

Update admin profile - part 3

Update admin profile - part 4

Functional testing of user account

Superadmin profile

Functional test

Upload files - two implementations of uploader interface (Symfony App)

Upload video - part 1

Upload video - part 2

Upload video - part 3

Delete videos

Categories select list in admin panel

Change video for no members

Remove novalidate attribute from html forms

Upload videos to Vimeo

Set duration for uploaded video

Delete a comment

Events & listeners, sending emails (Symfony App)

Create listener in Symfony

Send email on the event of adding a new video

Functional testing

Translations to other languages (Symfony App)

Translations - part 1

Translations - part 2

Caching pages, services & event subscribers (Symfony App)

Cache - part 1

Cache - part 2

Cache - part 3

Cache - part 4

Cache - part 5

Different enviromnents - Heroku deployment (Symfony App)

Before you start watching this section of the Symfony course

Heroku deployment - part 1

Heroku deployment - part 2

Symfony services by PayPal integration (Symfony App)


PayPal integration - part 1

PayPal integration - part 2

REST API with Symfony & API Platform


Install Symfony 5 and EasyAdmin bundle

Install API Platform. Create entities using Schema Generator component of API Pl

Customize EasyAdmin bundle

Upload images through EasyAdmin

Create related entities to manage through EasyAdmin

Authentication and authorization to EasyAdmin app

Create client JavaScript app to consume restAPI Platform app. GET API endpoint

Create pagination

Create a simple router

Sort api query result using API Platform order filter

Use exists filter of API Platform

Use search filter of API Platform

API Platform serialization groups (normalization and denormalization)

Test structured json-ld data with Google tools

The second javascript app to consume api. GET api request, disable pagination

Add an offer. POST rest api request

Delete an offer. DELETE rest api request

Install & configure JWT authentication package

Register a new user

Login to application

Create offers database relation for users, authorization

Using API Platform event subscriber

API Platform subresources (nested endpoints)

Create listener class to produce additional data to the JWT response - user id

Refactoring: make easier authorization. Use JavaScript Promises

Handle 401 error status code when invalid JWT token

Login automatically when invalid token

Lost password functionality - part 1

Lost password functionality - part 2

Lost password functionality - part 3

Lost password functionality - part 4

Lost password functionality - part 5

Lost password functionality - part 6

Lost password functionality - part 7

Upload a file through REST API - part 1

Upload a file through REST API - part 2

Upload a file through REST API - part 3

Validation and errors handling

Testing API with PhpUnit

Fix GetOffers authorization

API Platform Cache

Deploy API Platform app to Heroku

Fix "can not be converted to string" error

Final thoughts

BONUS section: RabbitMQ & CQRS with Symfony Messenger

Before you start watching this section of the Symfony course

Symfony Messenger Component - introduction

RabbitMQ basics

CQRS - introduction

Time for practice: simulate e-commerce system using Messages

Install first Symfony app

Create a controller for e-shop website

Install Symfony Messenger Component & use it

Dispatch CreadeOrder message

Dispatch SignUpSms message

Route messages to Doctrine transport

Install RabbitMQ

Create Symfony microservice and send messages to it

Create another Symfony microservice and send messages to it

Create two another Symfony microservices and send messages to them

Where to go from here

Upgrade guide

Upgrade Symfony from >=4.0 version

New features in the next major Symfony release (5)


Krzysztof8 October 2020

Prowadzący zamiast pisać kod, przekleja go ze schowka, przez co jest brak możliwości nadążać za kursem. Trzeba lekcje oglądać dwa razy i tracić czas na zrozumienie co sepleni.

Alex22 September 2020

Very good course on Symfony. Part 3 is actually all you need to start working with the framework. Detailed sections on real industry examples are also given. A couple of packages will not work the way it's described, you will have to tweak the settings. To be sure - don't use version 4.2, but 4.3, then you will have less problems. The section on the Rest API was a bit disappointing - too much time is spent on Java Script code. The course is not about JS, so it would be much better to keep the section clear, using Postman for API requests. In summary - recommended course for starting to work with Symfony.

Thato11 August 2020

was the best symfony course that I have done, but I feel that I needed a previous course (which I had already done prior to this) to keep up with this one as I would have had many questions If I had never used symfony before. As we approach the last few sections, It becomes difficult to follow along because not everything I did worked the first time (luckily I already had previous experience with symfony so I was able to debug and fix mos of my problems). The final RabbitMQ section took hours to do because installing on windows is not as easy as installing on Linux. I had to read the windows documentation which didnt help much because I don't understand what most of it means. I used chocolaty to install and get RabbitMQ working. Other than that, I learned so much in this course than I think I would have anywhere else. I only wish it was more windows friendly and there was explanations on stuff like "If you get this error, it might be because of x,y,z, so check those files." Thank you very much, you definitely know your stuff.

Bartek2 August 2020

I've purchased this course to learn a little bit of CQRS. And I do love the deeper approach with Symfony Messenger, RabbitMQ and CQRS. And everything is very well explained!

Amin30 July 2020

Thank you for this amazing course. i tried a many symfony's courses but this one was the most powerful one

Saif11 February 2020

So far this tutorial has been excruciating to watch. There are some good things and I do learn a lot but I am not enjoying it much. I give you the list. Cons: * Sometimes hard to understand because of the accent and wrong choice of words. * Little bit dry, not too exciting. * Portfolio project does not look appealing to the eye. * Squeezing way too much functionality in the application for just a tutorial. A lot of things are just duplicated. Copy pasted. * Way of using the editor strange. Large font and spacing. * Strange and unpleasant way of building the website. The website HTML is there already and we make it dynamic. Would prefer to have made it from scratch. Page by page, feature by feature, as you would in real life. Would be much better to understand. * Outdated way of programming, not following any good coding standards. * Not using good type hinting and phpdoc. Pros: * Covers a lot of materials * Very knowledgeable * You actually learn a lot * Technically ok-ish portfolio project

Marian4 February 2020

I have problems to follow all "requirements", cause the teacher forget to mention some parts he included in files automatically. It's harder to create them by my own :-(

Evgeny18 January 2020

Great course! The main thing is that it is updated with the release of updates from Symphony. Many thanks to the author!

Andrey14 January 2020

i'm still waching the course.I don't have much to complain about it,however at the beginning,mainly in the third section the content were a little big overwhelming and badly organized,but right away is making a little bit of sense to me as i'm advancing in the course except that and some other stuff the course is helping me grasp symfony

Julan2 January 2020

Course information is pretty good, but please learn some better English pronunciation and some more enthusiasm.

George10 December 2019

For now - 1 star - which seems one too much. Probably the only course on udemy without the option to download the project source code. For some strange reason the instructor decided to only add a single file for each lecture, so if you want to see the project and list dependencies or follow the final solution, or just skip some section, you are out of luck, you will be lost and unable to run the project... no one from the class has built the project and no one has provided the full project files (which is saying a lot already about it's usability...). Since you won't get the full project files, you won't be able to follow it properly, or go back and forth in lessons, or study the code...

Vitaliy6 December 2019

Great and comprehensive Symfony course which shows most possibilities of great framework. There are some inconsistencies between Symfony 3 & 4 topic discussions (such as provided Cache recommendations was changed in last Symfony 4 minor release), and some other small issues here and there, but they can be forgiven (as the course contains a huge amount of information). Another thing I want to say, that in our world, working as a Developer, you should always expect things to change quite often. Overall the course contains a lot of different interesting topics, and helps to build a global picture of Symfony components and how the real application should look like. As for those, who complain about code styling and some other recommendation violations, I would suggest you to use other sources to make your code good, such as S.O.L.I.D., Design Patterns (GoF) and Programming Principles (KISS, YAGNI, DRY, SoC). Also, take a look at DDD concept, which is also an interesting topic.

Musa29 November 2019

Der Kurs ist umfrangreich und für Symfony-Einsteiger wie mir sehr geeignet. Ich kann es jedem uneingeschränkt empfehlen.

Gabriel25 November 2019

Excelente curso, até o momento me surpreendeu. Já utilizava o symfony, mas aprendi a utilizar melhor diversas funções do framework.

Stéphane20 November 2019

This tutorial has everything I was looking for ... originally I come from the java world and this tutorial gives me all the information I need to bridge the gap and see how Symfony is a beautiful framework


Udemy ID


Course created date


Course Indexed date
Course Submitted by