PHP Symfony 4 API Platform + React.js Full Stack Masterclass

19h 24m 17s
English
Paid

Course description

Have you ever wanted to advance your PHP skills to the next level? Maybe you have some prior PHP experience but you never had a change to work with a framework? Or you are new to PHP at all? It does not matter! You can take this course to give your PHP projects a fresh start! In modern world, sooner or later, as a web developer you will have to create a API and a frontend application in React.JS or any other JS framework out there. It's just a must have these days for any professional web developer!

Read more about the course

This is where I can help you. Take this course to learn how to create robust APIs in PHP, using Symfony Framework 4 and API Platform. You will not believe how easy and instant it could be! I'll take you step by step during the whole process, from creating your own robust API to making a modern React.JS application using Redux, Redux-Form and all the other tools that you just need to know to get a job these days! You will be creating a Blog application, starting with the API in Symfony API Platform, and then a complete React+Redux frontend app. We will also configure an administration panel for managing the platform. Both Windows and MacOS are supported (I'll show you how to install and configure PHP and Node.js on both)

What will you learn about Symfony and API Platform?

You will learn how to create Symfony controllers and work with routing

You will learn how to represent your database tables as objects in Doctrine

You will see how you can quickly convert your Doctrine model to an API Resource

You will learn how to paginate, filter and sort your collections

You will see how to send an e-mail

You will learn everything about Authentication (user sign-up, sign-in, including account confirmation through e-mail)

You will understand everything about Authorization (User roles, privileges, restricting access)

You will know how to handle file uploads through REST API

You will learn how to log errors

You will learn both unit testing (PHPUnit) and functional testing (Behat)

You will know how to customize and extend the built-in operations that API Platform provide

Data validation and serialization/deserialization

What will you learn about React.js?

How to configure routes for your app using React Router

How to handle state with Redux

How to create great forms using Redux Forms

Communicating with the API using Thunk Middleware

After finishing this course you will be able to confidently create your own complicated APIs in Symfony using API Platform and create a SPA application using React.js!

What you'll learn:

  • You will know how to create a robust APIs in Symfony 4 using API Platform
  • You will understand the basics of Symfony Framework
  • You will know how to create a pretty complicated ReactJS application that works with API Platform (or any API!)

Requirements:

  • Any code editor
  • Some previous PHP exposure would be very useful (this course does not teach PHP from the very basics!)
  • JavaScript basics for the React part

Watch Online

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 220 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing

Watch Online PHP Symfony 4 API Platform + React.js Full Stack Masterclass

0:00
/
#1: Introduction

All Course Lessons (220)

#Lesson TitleDurationAccess
1
Introduction Demo
06:46
2
Course outline and how to make most of this course! (PLEASE WATCH!)
09:29
3
Tools (required/optional) overview
08:36
4
Installing PHP and Composer on Windows
05:50
5
Installing PHP and Composer on Mac
01:52
6
Installing Visual Studio Code
01:19
7
Namespaces
04:43
8
Class Fields and Methods
05:47
9
Method & Field Visibility
05:14
10
Inheritance
10:42
11
Abstract Classes
03:40
12
Interfaces
11:16
13
Typed Arguments & Function Return Types
12:29
14
Anonymous Functions (Closures)
04:49
15
Reflection API (Reverse-Engineer Classes, Methods, Functions)
05:05
16
Dependency Injection (In Practice)
05:47
17
Simple Service Container (Hands-On Coding!)
12:30
18
Service Autowiring Implementation Part 1
10:52
19
Service Autowiring Implementation Part 2
11:25
20
Annotations and Kernel Part 1
08:05
21
Annotations and Kernel Part 2
12:41
22
Creating new Symfony project
01:25
23
Routing annotations in controllers
02:47
24
Routing - route parameter wildcards
05:33
25
Routing - default parameter values
02:24
26
Routing - generating urls using route names
01:58
27
AbstractController, Request, Response
04:39
28
Installing ORM, maker, configuring database
02:10
29
Generating first Entity
03:17
30
Entity explained
02:31
31
Migration - modifying database structure
02:59
32
Persisting entities and serializing data
05:15
33
Fetching objects using repositories
03:22
34
ParamConverter - type hinting actions for automatic fetching of entities
06:00
35
Deleting entities
03:40
36
Doctrine Fixtures - seeding fake data
04:52
37
Admin panel introduction - EasyAdmin
03:15
38
Install API Platform and create the first resource
06:20
39
Generate User and Comment entity
02:19
40
ManyToOne relation and migration
09:13
41
Fixtures with references (for relations)
05:34
42
Password encoding in fixtures
04:02
43
Generate fake data in fixtures using Faker
07:56
44
BlogPost with Comment relation and fixtures
04:45
45
Built-in API Platform operations
05:42
46
Disabling operations
03:13
47
Introduction to serialization/deserialization
04:34
48
Serialization groups (controlling which properties are serialized)
02:16
49
EventSubscriber (hashing password)
06:51
50
Validator and validation constraints
04:44
51
Validation using regular expressions
04:30
52
Virtual property (not persisted to database)
02:58
53
Validating uniqueness of fields (username, email)
02:03
54
JWT Tokens introduction
05:26
55
Preparing JWT token library and keys
03:25
56
Configuring UserProvider
04:25
57
Firewall configuration
08:39
58
JSON login configuration and Guard Authentication explained
06:11
59
Authentication final configuration and first login using JWT token
05:43
60
Using is_granted() to control access to operations
02:56
61
BlogPost validation on POST
06:17
62
Setting author of BlogPost automatically (EventSubscriber)
08:16
63
Making sure only owner of BlogPost can modify it (PUT)
06:08
64
Controlling which properties can be changed (no username change)
06:45
65
Hasing password on User changes (PUT) - with Events
07:08
66
Comment resource operations (POST/PUT)
05:09
67
More randomness in fixtures
07:23
68
Setting author automatically (EventSubscriber) - using generic Interface
05:59
69
Setting published date automatically (EventSubscriber)
07:11
70
API subresources
05:20
71
Controlling how deep relations are serialized
07:44
72
Embedding Author resource inside BlogPost
04:10
73
Adding user role field with migration
05:48
74
User role fixtures
09:27
75
Defining role hierarchy
01:41
76
Verifying only users with specific role can POST resources
09:44
77
Different User view for admins (different serialization of all User entities)
09:21
78
Verifying only admin can see all User's email
03:03
79
User can view his full profile (including email and roles) - custom Normalizer
11:17
80
Verifying only the profile owner can see all properties
01:26
81
Disabling password hashing for PUT operation
05:53
82
Configuring custom operation for password reset in User
02:21
83
Creating custom Action class
10:32
84
Implementing custom PasswordReset action
08:36
85
Invalidating JWT tokens after password reset
11:18
86
User enabled property migration and fixtures
05:17
87
Implementing UserChecker to verify if account is enabled
03:51
88
Secure confirmation token generation
05:43
89
Generating confirmation token when user signs-up
04:35
90
UserConfirmation custom API Resource
03:36
91
UserConfirmation EventSubscriber
06:39
92
Verifying Confirmation Token endpoint
02:49
93
Install and configure Swift Mailer
03:50
94
Sending a test e-mail through Gmail
02:18
95
Refactoring UserConfirmation and Mailer into services
08:26
96
Traditional (non API) account confirmation route (for e-mail)
04:57
97
Verifying confirmation link received in e-mail
02:06
98
Install and configure uploading library
04:04
99
Image entity with migration and @Uploadable annotation
05:13
100
API Resource for Image entity
02:49
101
Implementing custom Action for upload
05:51
102
Creating Form for file upload
05:38
103
Assigning Image to BlogPost (ManyToMany relation)
04:00
104
Verifying assigning Image to BlogPost, embedding Image inside BlogPost
04:22
105
Configuring default collection sorting order
03:34
106
Search filter
06:40
107
Date filter
04:32
108
Range filter
02:06
109
Sorting filter
04:26
110
Filtering by nested properties
02:04
111
Property filter
03:00
112
Configuring collection pagination
06:07
113
Configuring collection pagination part 2
04:36
114
Partial pagination (performance gain)
01:46
115
Empty request body for POST/PUT requests problem
02:58
116
Handling empty request body
06:25
117
Fixing validation groups
01:57
118
Handling business logic exceptions
03:51
119
Installing Monolog library for application logging
07:56
120
Defining custom logging channel
04:32
121
Logging to separate files per channel
02:42
122
Production configuration for logger explained
03:39
123
EasyAdmin basic built-in features
07:02
124
Fixing empty body subscriber for form submittal
04:18
125
Custom Resource controller, customizing saving and updating an Entity
08:21
126
Image upload in admin panel
03:58
127
Custom page for individual BlogPost
05:27
128
Securing Admin panel area
06:07
129
Installing PHPUnit and writing first basic unit test
07:06
130
Testing EventSubscriber static configuration
04:27
131
Mocks (stubs) Part 1 - Mocking dependencies, Entities
05:32
132
Mocks (stubs) Part 2 - Mocking dependencies, Entites
05:10
133
Event class Mock, extracting repeated mock factory code
03:29
134
Parameters for mocks
04:50
135
Full test for AuthoredEntitySubscriber
06:38
136
Data providers in tests (using many data sets in 1 test case)
04:43
137
Finding potential errors using unit tests (null Token example)
05:46
138
Installing Behat & all extensions, first suite run
03:00
139
Configuring Behat
04:52
140
FeatureContext - creating database schema for each feature
08:26
141
First blog post test scenario
05:50
142
Testing protected URLs
07:05
143
Validating returned JSON using patterns (not matching exact values)
06:32
144
Looking for errors and issues using functional tests
03:11
145
Finding a comment problem
06:28
146
Custom error listener
13:06
147
Image upload feature
06:21
148
Working image upload functional test
02:41
149
Testing assigning Images to BlogPost, full suite run
04:50
150
Installing node & npm on Windows
01:19
151
Installing node & npm on MacOS
01:01
152
Installing dependencies and creating main index.js
03:06
153
Creating store, using Provider, Router and components
05:45
154
BlogPostList empty component, App as a container component
02:41
155
BlogPostContainer, using key for list of elements
06:19
156
Redux: actions, reducer, mapping state and dispatch to props 1
07:02
157
Redux: actions, reducer, mapping state and dispatch to props 2
04:36
158
Adding BlogPost (dummy action), Reducer explained
04:29
159
Making API requests with Superagent
05:00
160
Thunk Redux Middleware
09:19
161
Header component (navigation)
03:31
162
Loading indicator when making API requests
03:42
163
Formatting BlogPost list, formatting time (timeago.js)
03:32
164
Route with parameter - individual BlogPost
04:07
165
Fetching BlogPost from API
06:28
166
ComponentWillUnmount lifecycle method
04:42
167
BlogPost component - API changes
02:44
168
Spinner and Message components (loading state, simple message)
05:36
169
CommentListContainer component
10:31
170
CommentList reducer
03:45
171
Rendering comments
02:59
172
Introducing redux-form
02:24
173
Render redux form component
06:28
174
Adding redux-form reducer
02:10
175
Submitting Form to an API endpoint
03:57
176
Storing JWT token in LocalStorage, Token Middleware
03:15
177
Token Middleware and JWT authentication plugin 1
07:11
178
Token Middleware and JWT authentication plugin 2
06:06
179
Reading token in App component constructor
06:30
180
Redux Form submission, handling login errors
03:14
181
Checking whether user is authenticated (in Header component)
03:22
182
Fetching user profile through API
06:20
183
Rendering signed-in username in Header
07:43
184
Fetching user profile on page refresh
05:36
185
Create a redux-form for Comment posting
04:41
186
Redux-form submitting state simulation
02:27
187
Fully working CommentForm
04:21
188
Displaying errors in redux-form
03:43
189
Parsing API errors (validation constraint messages from API)
04:12
190
Animations - animated comment adding
05:47
191
Logout functionality (resetting stored JWT token)
06:20
192
Logging out user when token expires
05:57
193
Logging out user when he submits an expired token (401)
03:03
194
Paginator component
03:47
195
Paginator component - showing current page
02:47
196
Fetching blog post collection on page change
07:10
197
Query parameter based pagination (page in route parameter)
04:34
198
Pagination - previous/next buttons
09:27
199
Modify API - missing User embedded data on new Comment
01:48
200
LoadMore component - fetching next comments (different way of pagination)
08:47
201
Append new comments inside reducer
02:49
202
Registration form
05:32
203
Registration action creators and form validation
10:22
204
ConfirmationToken - modify e-mail to contain token, not only link
03:15
205
RegistrationContainer - 2 step registration process
03:52
206
Showing ConfirmationToken form on successful account creation
05:21
207
Keeping state of registration/confirmation process
05:17
208
Registration/Confirmation process, with redirect timer
08:17
209
BlogPost form for creating posts and user permissions
05:20
210
Functional BlogPost form
05:14
211
ImageUpload component (styling the file input)
06:32
212
Uploading images - upload request
09:50
213
ImageBrowser (preview uploaded images)
05:05
214
A new reducer for BlogPostForm
04:06
215
Clear the images when BlogPostForm unmounts
07:17
216
DELETE operation on Image (API Changes)
04:11
217
ImageBrowser animations
03:38
218
Remove button on ImageBrowser
03:58
219
Remove button on ImageBrowser sending DELETE request
03:16
220
Locking all buttons during Image upload/removal
04:47

Unlock unlimited learning

Get instant access to all 219 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription

Comments

0 comments

Want to join the conversation?

Sign in to comment

Similar courses

React Hooks

React Hooks

Sources: ui.dev (ex. Tyler McGinnis)
If you never develop a convincing answer for both of those questions, you won’t have a solid enough foundation to build upon when you dive into the specifics. These questions ar...
3 hours 47 minutes 48 seconds
React Fundamentals

React Fundamentals

Sources: ui.dev (ex. Tyler McGinnis)
If you're serious about learning React, there's no better place to do it. Originally launched in 2016, this course has been taken by tens of thousands of developers and maintain...
4 hours 36 minutes 46 seconds
MERN eCommerce From Scratch

MERN eCommerce From Scratch

Sources: udemy, Brad Traversy
There are a lot of "eCommerce" courses out there, but most use some kind of prebuilt plugin or platform. In this course, we will build a completely customized eCommerce / shoppi...
14 hours 49 minutes 45 seconds