Learn PHP Symfony 4 Hands-On Creating Real World Application
We'll go through each single task step by step, you will code along with me. I'd explain every detail of how things work, and how things should be done. At the end of this course you will not only complete a fully working, real world Twitter like application, you will also deploy it to the production server. But that's not it, we will also create an automation server, so a single Git commit will automatically release your application.
More
The recommended development environment is Vagrant and a ready Vagrant box Laravel Homestead, so you'll get up and running in no time. The course includes set up instructions for Ubuntu, MacOS and Windows. Of course you can use anything that works best for you, let it be XAMPP, MAMP, Docker, Vagrant or your own system, provided you have PHP 7+ and MySQL installed.
The course starts with introduction and setup lectures and and overview of how Symfony project structure looks like.
Then we'll move on and explain Service Container, as this is a crucial part of the framework. Don't worry if it's tough to understand and first, we will get back to it all the times, explaining how it works and seeing what you can do with it throughout the course.
Next section is centered around Controllers, Routes and Twig templating engine. You will learn how to create a backbone of your application and how to render HTML together with data using Twig. We will also see how we can install and manage assets, like CSS & JavaScript, by installing Bootstrap using yarn.
After that, will touch databases and the excellent Doctrine ORM. You will learn how you can create simple PHP objects as a representation of a table rows. You will learn about database migrations - an easy way of managing your database schema changes. This section will also show you how to quickly fetch, modify and delete data from the database.
- Basic understand of PHP and Object Oriented Programming
- Mac, Windows or Ubuntu system
- IDE or any other code editor
- PHP developers that do not know any framework
- Developers with some knowledge of other PHP frameworks
- Developers that need and want to pick-up Symfony fast with straight to the point course
What you'll learn:
- You will create a fully working, real world website in Symfony
- You will have strong understanding of the framework
- Learn and see how Continuous Deployment and Continuous Integration works
- You will automate deployment using single commit to deploy the website to outside world
- Deep understanding of how databases and Doctrine ORM works
- Learn how to create forms, save, edit and validate data
- Learn how to create and deal with complicated Database relations
- Send e-mails and understand Symfony Event system
- Secure the application and restrict access to certain parts of application to specific users
- Create SQL queries in Doctrine, Doctrine Table Inheritance and Lifycycle callbacks
- Learn how to translate your application into many different languages
- Understand how sessions work
- Test your application by writing Unit tests with PHPUnit
- Provision a remote server by installing Apache, PHP, MySQL using SSH
Watch Online Learn PHP Symfony 4 Hands-On Creating Real World Application
# | Title | Duration |
---|---|---|
1 | Introduction | 05:50 |
2 | About Symfony | 02:35 |
3 | Tools overview | 02:11 |
4 | Setting up Vagrant on Windows | 06:10 |
5 | Setting up Vagrant on Ubuntu | 03:22 |
6 | Setting up Vagrant on MacOS | 04:09 |
7 | Running Vagrant and creating a new Symfony 4 project | 05:05 |
8 | Symfony project structure overview | 06:23 |
9 | About Service Container | 06:11 |
10 | Autowiring, Autoconfiguring services | 04:20 |
11 | Public, private services, service aliases | 05:15 |
12 | Service tags | 04:55 |
13 | Manual service wiring, parameter binding | 06:02 |
14 | About controllers | 12:34 |
15 | About routing | 08:54 |
16 | Introduction to views (Twig) | 10:40 |
17 | Twig filters & custom Twig extensions | 07:53 |
18 | Custom error pages using Twig | 06:00 |
19 | Global variables in Twig | 05:16 |
20 | Handling assets (JavaScript, CSS) using Symfony Encore (and Webpack) | 08:15 |
21 | Installing Bootstrap 4 and compiling assets using Encore (Webpack) | 08:36 |
22 | Doctrine introduction | 11:52 |
23 | Creating first Entity | 07:34 |
24 | Creating a database migration | 07:58 |
25 | Basics of doctrine repository | 10:32 |
26 | Creating fixtures (database seeding) | 06:25 |
27 | Creating a form and handling form submission | 10:46 |
28 | Repository find methods and Twig include | 10:43 |
29 | Repository findBy, form validation, handling Entity changes | 09:10 |
30 | Deleting an Entity and flash messages | 05:47 |
31 | Doctrine internals (Entity, EntityManager, Unit of Work, Identity Map) | 06:03 |
32 | Security concepts | 04:43 |
33 | Security component config and HTTP Basic login | 09:47 |
34 | Creating User entity | 08:51 |
35 | User Entity fixtures | 09:44 |
36 | Login form part 1 | 09:42 |
37 | Login form part 2 | 10:54 |
38 | Adding validation to User entity | 06:28 |
39 | User registration form | 08:20 |
40 | User registration controller | 11:49 |
41 | Assigning user to MicroPost (ManyToOne & OneToMany) | 13:25 |
42 | Fixtures for relations (using references in fixtures) | 04:39 |
43 | Verifying user permissions in Twig (is_granted) | 11:24 |
44 | Adding randomness to fixtures | 05:20 |
45 | Security Voters introduction | 03:19 |
46 | Restricting access to edit or delete a micro post using SecurityVoter | 11:11 |
47 | Securing controller actions and templates using Security Voter | 11:48 |
48 | Adding an Admin User with all permissions | 12:07 |
49 | Security role hierarchy | 02:28 |
50 | Restricting adding new posts to registered users (many ways of doing that) | 06:07 |
51 | Lazy loading, proxy classes, repository find* methods criteria | 09:45 |
52 | Doctrine Lifecycle Callbacks | 04:25 |
53 | ManyToMany self-referencing relation (following/followers) | 09:03 |
54 | Fetching collections lazily in templates | 07:31 |
55 | Follow/Unfollow functionality (controller, adding Entities to Collections) | 16:59 |
56 | Follow/Unfollow functionality (security, verifying uniqueness) | 05:41 |
57 | Doctrine QueryBuilder - creating queries in OOP manner | 11:54 |
58 | ArrayCollection vs PersistentCollection vs Collection | 09:44 |
59 | Creating custom query to fetch users with more than 5 posts | 12:44 |
60 | More on Doctrine Collections (from the database perspective) | 02:48 |
61 | Section introduction | 00:54 |
62 | ManyToMany relationship for liked posts | 07:31 |
63 | Likes controller | 09:33 |
64 | Implementing like functionality through XHR requests (including JavaScript) | 18:55 |
65 | Notifications introduction | 00:52 |
66 | Doctrine Table Inheritance - base Notification Entity | 10:11 |
67 | NotificationRepository - fetching notifications unseen by user | 06:41 |
68 | Unseen notification badge (Twig + JavaScript) | 09:41 |
69 | Doctrine EventSubscriber - saving a notification as a reaction to other events | 17:45 |
70 | Unseen notification list | 11:05 |
71 | Marking notifications as being read (Doctrine Query Builder UPDATE queries) | 10:12 |
72 | Introduction to EventDispatcher | 03:09 |
73 | Dispatching an event when user registers | 05:31 |
74 | EventSubscriber - listening to user register event | 04:14 |
75 | Sending e-mail after user registers using Swift Mailer | 09:45 |
76 | E-mail spooling | 05:08 |
77 | Creating a Mailer class to handle e-mail sending (and generation using Twig) | 05:16 |
78 | Account confirmation (using secure token, confirmation link on e-mail) | 15:03 |
79 | Installing and configuring translation component | 04:36 |
80 | Using trans Twig filter to translate strings and validation messages translation | 07:15 |
81 | Translation strings with variables (translating confirmation e-mail with links) | 10:18 |
82 | Translation pluralization (different translation depending on variable) | 05:15 |
83 | Introduction to sessions | 03:19 |
84 | Storing user sessions in database | 10:01 |
85 | LocaleSubscriber - keeping user locale (language) in session | 09:55 |
86 | UserPreferences Entity & OneToOne relation with User Entity | 09:13 |
87 | Creating new UserPreferences after user registration (responding to event) | 06:33 |
88 | UserLocaleSubscriber - loading user language from DB and keeping in session | 06:18 |
89 | Introduction to unit testing (using PHPUnit) | 01:54 |
90 | Writing first unit test | 08:08 |
91 | Creating PHPUnit Mocks | 06:16 |
92 | A more complicated case with testing | 09:56 |
93 | Creating a GitHub account and adding an SSH key | 05:43 |
94 | Creating a DigitalOcean droplet | 01:43 |
95 | First login to virtual server and changing the root password | 01:34 |
96 | Creating and adding an SSH key to DigitalOcean (and managing SSH keys) | 04:44 |
97 | Installing Apache2 on virtual server | 04:43 |
98 | Installing PHP 7.2 on virtual server | 02:19 |
99 | Installing MySQL on virtual server and creating a database | 02:57 |
100 | Configuring Apache Virtual Host and using fake SMTP testing server | 08:16 |
101 | Moving application code to production server using Git & dependencies | 06:08 |
102 | Running migrations on server and folder permissions | 07:34 |
103 | Introduction to Continuous Integration & Continuous Deployment | 03:02 |
104 | Setting up CircleCI (automation server) | 10:18 |
105 | Running our first automation job (running tests) | 03:58 |
106 | Adding deployment SSH key to CricleCI | 01:13 |
107 | Deployment job and deployment scripts | 12:28 |
108 | Running the deployment job | 05:19 |