Software Engineering


REST API with Symfony5 and PHP8 using Domain Driven Design

How to use recent versions of Symfony and PHP and creating a api backend with following DDD

3.75 (2 reviews)

REST API with Symfony5 and PHP8 using Domain Driven Design


3 hours


Apr 2021

Last Update
Regular Price

What you will learn

RestAPI implementation with best practices with idempotent requests and relevant http methods

Domain Driven Design elements with encapsulating all domain logic inside higher level while being flexible in low level implementations inside infrastructure layer.

Using Doctrine as ORM without coupling tightly.

PHP8 and latest language features

Symfony 5 and core components


This course is going to try to create a base for a scalable backend with using Symfony Framework version 5. We will separate the app to 3 main parts Application, Domain and Infrastructure. And going to try not to stay tightly coupled to the framework itself but still going to use the all features Symfony is providing us.

Application layer will be a transition between the outside world to our Domain and going to isolate everything domain related inside our DDD.

Also will be taking care of authentication with JWT and going to use Symfony Security bundle to maintain the user access definitions to resources.   

Will be writing Unit tests and use a framework for mocking/stubbing the test doubles.

In Infrastructure layer we are going to use Doctrine as ORM and try to not to stay tightly coupled to the library but stay as flexible as possible so we can use the same domain logic easily whenever we want with some other library or even with plain SQL queries.

Since we are going to implement a rest api, we are also going to use an api provider to get the data for our game. To access the api provider we will implement some commands with using Symfony Command component.



Who am I and why you should take this course

Essential tools should be installed before starting to the course

Project details and API Provider

Why do we need to use an ORM and Doctrine setup

Docker setup for local development

Preparing development environment

Domain Driven Architecture and Folder Structure

Doctrine schema definitions

Domain Layer and Doctrine ORM

Entity definitions

Running Doctrine schema update and creating some fixtures

More Abstraction on DDD

Security and JWT

Setup for JWT

Changing the namespace and installing logger

Getting the token and authenticating first user

Application and Infrastructure Layer

User Registeration

Fetch Leagues from Rapid API

More into AWS S3

Fetch Teams from Rapid API

Fetch Games Command

Fetch Scores Command

More Domain Logic

Complete the game

Give points to the player

List games

Make a guess

Unit Testing with PHPUnit and Prophecy

Unit tests for guess handler

Prophecy and using test dammies/stubs/mocks

Deployment and version control

Github setup and CD/CI with Github actions

AWS Code Deploy and Github actions scenario

PHP 8 Constructor Property Promotion and Code Coverage

Closing and thanks for watching


Kati10 March 2021

This course gives a good example on how to apply Domain-Driven Design in PHP. However, if you do not have any theoretical knowledge about PHP, AWS, Symfony or DDD the course might be a little to hard. Some technical details were not properly explained, e.g. how to setup an AWS account or how to connect to the RapidAPI service. While the final result is very beautiful code, it takes a few videos to fully grasp the concept. It would have been helpful to have the full final code repository available. Since I was typing along and repeating all the steps, there sometimes were errors that took unnecessarily long to fix. Nevertheless, I enjoyed this course very much and think that this is a good first course by this instructor.


Udemy ID


Course created date


Course Indexed date
Course Submitted by