1 Welcome to the Course! Demo 03:49 2 04:46 3 Source Code of The Course! 04:19 4 Visual Studio Code Recommendations 05:16 5 02:17 6 Setting Up for Windows! - Section Introduction 00:22 7 Installing PHP 8.2 on Windows 05:51 8 Installing Composer on Windows 02:49 9 Installing and Running Docker (for MySQL etc.) on Windows 03:07 10 Installing Node.js on Windows (Required Later!) 03:04 11 Setting Up for Mac! - Section Introduction 00:32 12 Installing the Homebrew Package Manager 01:49 13 Installing PHP 8.2 on Mac 02:28 14 Installing Composer on Mac 01:53 15 Installing and Running Docker (for MySQL etc.) on Mac 02:42 16 Installing Node.js on Mac (Required Later!) 02:26 17 Project #1 - Section Introduction 01:42 18 17:00 19 14:43 20 09:09 21 13:50 22 Layouts Using Template Inheritance 17:50 23 Running a MySQL Database and Client Using Docker 05:33 24 Connecting to the Database From Laravel 06:54 25 13:03 26 15:37 27 12:25 28 Forms and CSRF Protection 13:06 29 Validating and Storing Data 09:31 30 Sessions, Errors & Flash Messages 10:10 31 10:11 32 Keeping Old Values in the Form 03:09 33 Reusability (Route Model Binding Form Requests, Mass Assignment) 17:21 34 04:54 35 Reusing Blade Code - Subviews 08:55 36 04:30 37 09:49 38 Adding Styling with Tailwind CSS 12:48 39 17:05 40 10:55 41 Styling Flash Message & Using Alpine.js 15:06 42 Project #2 - Section Introduction 02:15 43 Creating the Book Review Project and Setting Up 08:01 44 Defining the One to Many Relationship 11:09 45 14:59 46 Querying & Associating Related Models 16:41 47 11:19 48 Aggregations on Relations 06:54 49 Highest Rated & Popular Books 06:48 50 Getting Books with Recent Reviews 16:34 51 Controllers & Resource Controllers 12:11 52 18:11 53 Filter Books by Title - Adding the Form 07:44 54 Popular or Highest Rated - the View 14:38 55 Popular or Highest Rated - the Logic 11:05 56 09:59 57 Cache and Caching Queries 12:06 58 17:57 59 Rating and Review Count on All Pages 13:19 60 Blade Components - Star Rating Component 11:40 61 Scoped Resource Controller - Adding a Review 17:53 62 12:58 63 Project #3 - Section Introduction 01:31 64 Creating the REST API Project 18:38 65 Seeding Data for the REST API 14:41 66 Postman REST Client Crash Course 15:28 67 Storing Data and Validation 14:39 68 Updating and Deleting Data 09:12 69 API Resources - Controlling JSON Response 14:09 70 15:45 71 Optional Relation Loading 12:50 72 Universal Relation Loading Trait 17:50 73 Loading Attendee Relations 02:50 74 Setting Up Authentication Using Sanctum 18:52 75 10:43 76 Automatically Adding Token in Postman Requests 03:41 77 Revoking Tokens and Signing Out 07:44 78 18:05 79 Authorization with Policies 15:47 80 Manual Authorization with Policies 01:53 81 Reminding About Events - Custom Artisan Command 13:54 82 Reminding About Events - Task Scheduling 09:18 83 Reminding About Events - Notifications and Email Sending 14:24 84 Reminding About Events - Queues 09:44 85 07:12 86 Project #4 - Section Introduction 01:58 87 Creating the Project and Setting Up Livewire 06:11 88 Creating Models and Migrations for the Poll App 12:19 89 Your First Livewire Component 08:23 90 08:50 91 08:31 92 06:21 93 07:43 94 Refactoring the Poll Storing Code 06:28 95 10:40 96 08:10 97 Events - Communication Between Components 05:47 98 04:33 99 Project #5 - Section Introduction 04:15 100 Creating the Job Board Project and Job Model 14:37 101 04:01 102 Setting Up Tailwind CSS using Vite (and Node) 13:48 103 08:41 104 Jobs Page & Card Component 10:43 105 Jobs Page: Tag Component & Job Info 11:23 106 Job Page: Job Card & Link Button Components 12:52 107 16:26 108 Filtering Jobs: Tailwind Form Plugin & Text Inputs 16:21 109 Filtering Jobs: Form & Searching for Text in Job Posts 09:21 110 Filtering Jobs: Min & Max Salary 07:57 111 Filtering Jobs: Radio Button Filters (Select One Option of Many) 13:02 112 Filtering Jobs: Radio Group Component 08:21 113 Filtering Jobs: Configuring Labels and Talking About Arrays in PHP 13:41 114 Filtering Jobs: Clearing the Input 16:16 115 Refactor Time: Gradient Background, Styling Buttons, Adding Alpine.js 13:17 116 Refactor Time: Plain Vanilla JavaScript to Alpine.js 08:31 117 Refactor Time: Refactoring Filtering Backend Logic 15:24 118 Employer: Model, Migration, Relations 11:15 119 Employer: Factory & Seeder 08:28 120 Employer: Searching By Employer Name 06:27 121 Employer: Other Employer Jobs on the Job Page 08:01 122 Authentication: The Controller 05:15 123 Authentication: Sign-in Form 12:58 124 Authentication: Sign-in Logic 09:56 125 Authentication: Logging Out 14:17 126 Applying for Jobs: Model, Factory, Relations & Migration 09:26 127 Applying for Jobs: Controller, Routing and Application Form 11:26 128 Applying for Jobs: The Logic 10:12 129 Applying for Jobs: The Job Policy 09:49 130 Applying for Jobs: Did I Already Apply? 07:12 131 My Applications: Controller and View 10:27 132 My Applications: Applicant Count, Average Asking Salary 10:35 133 My Applications: Cancelling Applications 08:25 134 File Uploads: Understanding File System & Configuring Disks 12:01 135 File Uploads: Uploading Files 11:26 136 Refactor Time: Displaying Input Errors 13:02 137 Refactor Time: Label Component 06:51 138 Refactor Time: Flash Errors 01:40 139 Employer: Register as an Employer 13:18 140 Employer: Middleware Checking for Permissions 12:20 141 Employer: Adding Jobs Form 16:15 142 Employer: Adding Jobs Logic 11:44 143 14:27 144 Employer: Editing Job Offer 12:27 145 14:30 146 10:36 147 Employer: Soft Deletes - Querying for Trashed Records 05:55 148 01:53 149 02:10 150 About Laravel Versions (OPTIONAL) 01:49 151 Setup Recommendations and Course Prerequisites 03:52 152 Code Editor: Visual Studio Code Setup and Recommendations 06:00 153 02:24 154 Additional Learning Resource (Cheat Sheet, Diagrams) 01:42 155 Windows - Setting Up XAMPP (PHP/Apache/MySQL) 03:16 156 Windows - PHP in the Command Line 02:37 157 01:54 158 Mac - Setting Up XAMPP (PHP/Apache/MySQL) 02:59 159 Mac - PHP in the Command Line 04:27 160 01:40 161 Windows - Setting Up Virtual Host in Apache 04:22 162 Windows - Setting Up Host on the System 01:42 163 Mac - Setting Up Virtual Host in Apache 03:21 164 Mac - Setting Up Host on the System 02:17 165 Laravel Project Structure Overview 03:25 166 03:11 167 Understanding Routing in Laravel 01:57 168 03:05 169 Managing and Naming Routes 02:54 170 03:27 171 Optional Route Parameters 03:40 172 Constraining Possible Route Parameters Values 04:12 173 Understanding Templating, Views and Blade 05:27 174 Template Inheritance and Layouts 07:49 175 Passing and Rendering Data in Templates 04:58 176 Simple View Rendering Routes 02:06 177 03:29 178 Conditional Rendering Alternatives 03:27 179 06:22 180 More Control Inside Loops 06:16 181 Partial Templates (Including Templates) 04:11 182 Partial Templates in Loops 02:52 183 Responses, Codes, Headers, and Cookies 04:59 184 04:19 185 01:21 186 02:29 187 03:23 188 Request Input (Reading User Input) 04:33 189 Request Input - An Overview of Options 01:45 190 Middleware - Running Code Before & After Request 04:20 191 05:09 192 Single Action Controllers 01:57 193 01:32 194 Implementing a Resource Controller 05:40 195 Configuration and Environments Overview 03:47 196 Configuring the Database Connection 03:29 197 Databases Bird's Eye Overview 01:46 198 02:41 199 Creating and Running Migrations 05:06 200 Understanding Eloquent ORM Models 02:09 201 Models - Creating and Updating, Introducing Tinker 03:20 202 Models - Retrieving Single Model 02:12 203 Models - Retrieving Multiple Models and Collections Overview 02:17 204 Models - Using the Query Builder 04:15 205 Practical - List of Blog Posts and Single Blog Post 03:22 206 04:15 207 Cross Site Request Forgery Explained 04:31 208 Forms - Storing Submitted Data 03:37 209 04:02 210 Forms - Displaying Validation Errors 02:51 211 Forms - Form Request Classes 03:22 212 02:16 213 01:30 214 Forms/Models - Model Mass Assignment 05:18 215 08:58 216 03:40 217 CRUD - Deleting Using Forms 04:52 218 03:02 219 Introduction to Laravel Mix 03:31 220 Installing Bootstrap CSS Framework 02:15 221 Using NPM and Compiling Assets With Mix/Webpack 03:30 222 Including Assets in Views 01:31 223 Versioned Assets (Cache Improvements) 02:58 224 Introduction to Bootstrap CSS 02:14 225 Understanding CSS Flexbox in General and in Bootstrap 03:24 226 Layout Grid and Styling Header Bar 08:04 227 02:56 228 02:57 229 03:14 230 Styling Flash Messages and Error Messages 01:55 231 07:04 232 Testing configuration and environment 04:51 233 Writing first functional test 07:18 234 Testing database interactions 08:14 235 Testing store() action (model creation) 05:36 236 07:42 237 Testing update() action (model updates) 07:21 238 Testing delete() action (model deletion) 05:20 239 One to One relation with migration 08:48 240 One to One assigning relationship 08:45 241 One to One querying relationship 07:39 242 One to Many relation with migration 07:23 243 One to Many assigning relationship 05:59 244 One to Many querying relationship 05:25 245 Lazy Loading vs Eager Loading 07:21 246 Querying relationship existence 07:44 247 Querying relationship absence 03:57 248 05:12 249 Using withCount() in practice (fetching count of comments) with test 05:13 250 Model Factory introduction 12:06 251 14:54 252 Model Factory callbacks (afterCreating, afterMaking) 08:41 253 Application: Implementing comment list 06:52 254 12:26 255 How user registration works in Laravel 15:39 256 Guard component and how logging users in works 16:58 257 Custom registration form and Auth routes 07:46 258 Formatting validation errors 07:50 259 RedirectIfAuthenticated middleware 03:16 260 Log-in form with "Remember Me" feature 07:13 261 Logging out, @guest directive, debugging CSRF token errors 11:43 262 Retrieving the currently authenticated user 04:32 263 Protecting routes (requiring authentication) 05:13 264 Testing routes that require authentication 10:21 265 Refreshing database, database foreign keys and existing data 14:46 266 Problem: SQLite test database NOT NULL problem 02:32 267 05:38 268 Using Model Factory inside Seeder 05:44 269 Model relations inside seeder 10:21 270 Individual seeder classes 08:52 271 Making seeder interactive 11:53 272 Deleting related model using model events 06:04 273 Deleting related models using cascading 05:23 274 04:59 275 06:44 276 Restoring soft deleted model 10:43 277 Testing soft deleted models 03:06 278 Authorization introduction 06:15 279 08:48 280 02:52 281 Verifying permissions of the user 04:13 282 Admin users and overriding permissions 13:11 283 11:38 284 14:02 285 Verifying permissions in Blade templates 05:47 286 Using middleware to authorize routes 10:38 287 Application: updating tests 06:25 288 Application: setting user_id for the new BlogPost 03:49 289 Global Query Scopes introduction 09:06 290 Global Query Scopes and potential issues 10:41 291 Local Query Scopes introduction 10:01 292 Practical: Local Query Scope - most commented posts 09:57 293 Practical: Local Query Scope - most active users 10:05 294 Practical: Local Query Scope - most active users last month 12:17 295 Practical: Global Query Scope - admin can see deleted posts 15:31 296 Blade Components introduction 09:34 297 03:34 298 Conditional rendering in Component 05:32 299 Practical: creating reusable component for dates 08:20 300 Complicated example of conditional rendering 10:11 301 Application: Fixing an issue with HAVING clause 02:08 302 08:02 303 10:32 304 11:16 305 07:18 306 04:04 307 Practical: using cache as storage 06:46 308 Practical: using cache for storage implementation 13:27 309 Using and setting up Redis as cache storage 10:27 310 06:11 311 Practical: using cache tags 08:28 312 02:40 313 05:38 314 Defining ManyToMany on models 03:38 315 Associating models in ManyToMany 10:36 316 Querying the ManyToMany relation and Pivot tables 07:31 317 Practical: displaying the list of tags using Blade component 06:17 318 Practical: list of blog posts by tag 10:23 319 08:40 320 View Composer with @include 08:00 321 14:05 322 Practical: User to Comment OneToMany relation and migration 07:02 323 Practical: comments form and reusable errors component 09:06 324 13:34 325 Eager loading nested relationships 08:32 326 Converting repeating queries to query scopes 03:38 327 File Storage introduction 09:50 328 02:18 329 09:07 330 Using Storage facade to store files 10:42 331 Getting the URL of stored file 10:03 332 Practical: Image model, OneToOne relation and migrations 08:23 333 06:35 334 Practical: Displaying uploaded image and styling 05:21 335 05:07 336 Validating uploaded files (size, type, dimensions) 06:20 337 02:14 338 Practical: Scaffolding UserController and UserPolicy, using authorizeResource 12:14 339 Practical: Views for showing/editing user profile 13:48 340 OneToOne Polymorphic explained 04:07 341 OneToOne Polymorphic migration 06:28 342 OneToOne Polymorphic defining relation 02:43 343 OneToOne Polymorphic associating 04:03 344 Practical: OneToOne Polymorphic with BlogPost and Image 13:03 345 OneToMany Polymorphic explained 02:04 346 OneToMany Polymorphic migration & relation 06:16 347 OneToMany Polymorphic associating 09:56 348 Practical: OneToMany Polymorphic views 14:22 349 Practical: Running tests on MySQL database 07:29 350 OneToMany Polymorphic seeder 07:18 351 ManyToMany Polymorphic explained 05:49 352 ManyToMany Polymorphic migration 14:53 353 ManyToMany Polymorphic relations 05:13 354 Understanding model Traits 04:21 355 Creating Taggable model trait 19:16 356 Development setup for sending emails 06:22 357 The Mailable class explained 10:19 358 Rendering e-mail content and e-mail sending 10:28 359 Attaching files & data to e-mails 10:40 360 Embedding an image inside the e-mail 05:23 361 Markdown Mailable classes explained 04:56 362 Creating the Markdown Mailable class 09:23 363 Custom Markdown e-mail component and styling 07:09 364 Rendering e-mail previews in browser 02:12 365 Queues and background processing introduction 08:14 366 Configuring queues, creating and running the first job 10:08 367 Optional e-mail queuing and execution delay 05:19 368 09:55 369 Creating and dispatching custom jobs 06:08 370 Implementing custom job that dispatches other jobs 17:06 371 16:05 372 Named queues and prioritizing 06:16 373 11:07 374 08:53 375 Practical: Custom Event and Listener 10:31 376 Second example of Event and Listener 09:52 377 Logging basics in Laravel 07:10 378 Handling built-in Laravel events with Subscriber 08:22 379 Localization introduction and demo 04:42 380 Configuring locale and translation overview 04:41 381 Translating plural forms, passing data 13:48 382 Storing translations in JSON 05:51 383 Translating the application 07:48 384 Storing user preffered language in database 11:38 385 Creating custom Locale Middleware 10:53 386 Adding language to URL through Apache configuration 09:34 387 What is a Service and creating a custom one 07:08 388 Service Container in practice 09:57 389 Basic Dependency Injection 08:16 390 Dependency Injection and Contracts 12:17 391 10:44 392 07:48 393 Postman - a quite long introduction 16:49 394 How Model serialization works 05:59 395 04:49 396 Serializing model relations 05:46 397 API Resources introduction 09:36 398 Serializing model relations using a Resource class 04:34 399 Limiting serialization only to eager loaded relations 03:02 400 Conditional serialization of properties 03:24 401 API routes and controllers 14:41 402 Practice defining API routes 16:49 403 Returning a resource collection and response wrapping 04:59 404 03:51 405 Collection pagination and custom parameters 04:24 406 07:40 407 API Tokens explained and implemented 15:33 408 Returning one, updating and deleting resources 08:56 409 Handling 404 (resource not found) 09:39 410 16:19 411 Testing API GET methods, verifying JSON structure 11:25 412 Testing API GET methods, verifying JSON structure II 08:09 413 Test API storing (POST) resources, authentication and validation 10:18