Introduction
  • Introduction
  • About Symfony
  • Tools overview
  • Full source code
Work environment setup & overview
  • Setting up Vagrant on Windows
  • Setting up Vagrant on Ubuntu
  • Setting up Vagrant on MacOS
  • IMPORTANT! Vagrant problems and FAQ
  • Running Vagrant and creating a new Symfony 4 project
  • IDE/Editor and tools overview and recommendations
  • Symfony project structure overview
Service Container
  • About Service Container
  • Autowiring, Autoconfiguring services
  • Public, private services, service aliases
  • Service tags
  • Manual service wiring, parameter binding
Controllers, Routes, Views
  • About controllers
  • About routing
  • Introduction to views (Twig)
  • Twig filters & custom Twig extensions
  • Custom error pages using Twig
  • Global variables in Twig
  • Handling assets (JavaScript, CSS) using Symfony Encore (and Webpack)
  • Installing Bootstrap 4 and compiling assets using Encore (Webpack)
Introduction to Databases (Doctrine2 ORM)
  • Doctrine introduction
  • Creating first Entity
  • Creating a database migration
  • Basics of doctrine repository
  • Creating fixtures (database seeding)
  • Creating a form and handling form submission
  • Repository find methods and Twig include
  • Repository findBy, form validation, handling Entity changes
  • Deleting an Entity and flash messages
  • Doctrine internals (Entity, EntityManager, Unit of Work, Identity Map)
Securing the application
  • Security concepts
  • Security component config and HTTP Basic login
  • Creating User entity
  • User Entity fixtures
  • Login form part 1
  • Login form part 2
  • Adding validation to User entity
  • User registration form
  • User registration controller
  • Assigning user to MicroPost (ManyToOne & OneToMany)
  • Fixtures for relations (using references in fixtures)
  • Verifying user permissions in Twig (is_granted)
  • Adding randomness to fixtures
  • Security Voters introduction
  • Restricting access to edit or delete a micro post using SecurityVoter
  • Securing controller actions and templates using Security Voter
  • Adding an Admin User with all permissions
  • Security role hierarchy
  • Restricting adding new posts to registered users (many ways of doing that)
Doctrine advanced (following functionality)
  • Lazy loading, proxy classes, repository find* methods criteria
  • Doctrine Lifecycle Callbacks
  • ManyToMany self-referencing relation (following/followers)
  • Fetching collections lazily in templates
  • Follow/Unfollow functionality (controller, adding Entities to Collections)
  • Follow/Unfollow functionality (security, verifying uniqueness)
  • Doctrine QueryBuilder - creating queries in OOP manner
  • ArrayCollection vs PersistentCollection vs Collection
  • Creating custom query to fetch users with more than 5 posts
  • More on Doctrine Collections (from the database perspective)
Doctrine advanced Part 2 (likes functionality & user notifications)
  • Section introduction
  • ManyToMany relationship for liked posts
  • Likes controller
  • Implementing like functionality through XHR requests (including JavaScript)
  • Notifications introduction
  • Doctrine Table Inheritance - base Notification Entity
  • NotificationRepository - fetching notifications unseen by user
  • Unseen notification badge (Twig + JavaScript)
  • Doctrine EventSubscriber - saving a notification as a reaction to other events
  • Unseen notification list
  • Marking notifications as being read (Doctrine Query Builder UPDATE queries)
Sending e-mails and Event Dispatcher
  • Introduction to EventDispatcher
  • Dispatching an event when user registers
  • EventSubscriber - listening to user register event
  • UPDATE: Missing code on next lecture
  • Sending e-mail after user registers using Swift Mailer
  • E-mail spooling
  • Creating a Mailer class to handle e-mail sending (and generation using Twig)
  • Account confirmation (using secure token, confirmation link on e-mail)
Translations and internationalization
  • Installing and configuring translation component
  • Using trans Twig filter to translate strings and validation messages translation
  • Translation strings with variables (translating confirmation e-mail with links)
  • Translation pluralization (different translation depending on variable)
Sessions (and Translations used with EventSubscriber)
  • Introduction to sessions
  • Storing user sessions in database
  • Change: Event Changes in Symfony Version >= 4.3