Introducing the Task Manager Project
Introducing the Task Manager Project
~11 Min. Lesezeit Zuletzt aktualisiert am August 8, 2026
Before starting routing in block 2, a detailed look at our project's domain model – the structure we'll continuously work on from now through chapter 49.
The domain model
Four central concepts, which we'll gradually model as Doctrine entities (block 4):
- User – a registered user, can be a member of several projects.
- Project – a workspace with a name, belongs to ONE owner (
User) and has SEVERAL members. - Task – a single task within a
Project, with a title, status (open/in progress/done), due date, and an assignedUser. - Comment – a comment by a
Useron aTask.
The relationships at a glance
Relationships between the four core entities
User (1) ──────owns─────── (n) Project User (n) ────member of──── (n) Project [ManyToMany] Project (1) ────has──────── (n) Task User (1) ───assigned to──── (n) Task Task (1) ───────has──────── (n) Comment User (1) ──────writes────── (n) Comment
This relationship variety is DELIBERATE: OneToMany/ManyToOne (chapter 22) and ManyToMany (chapter 23) BOTH occur naturally in the same project, instead of being artificially constructed for a teaching example.
What features we build, block by block
- Block 2 (routing/controllers): displaying project and task lists.
- Block 3 (Twig/forms): creating/editing projects and tasks via forms.
- Block 4 (Doctrine): all four entities with their relationships, database persistence.
- Block 5 (security): registration, login, access control (only project members see project content).
- Block 6 (services/events): notifications on task assignment, sending emails.
- Block 7 (console/testing): reminder emails for overdue tasks via a cron command, automated tests for the core logic.
- Block 8 (caching/deployment): caching dashboard statistics, becoming production-ready.
Tipp: This chapter serves as a PERMANENT reference – come back to it in later chapters when you wonder WHY a particular entity or relationship is modeled the way it is.