
Let's see what are we gonna build and learn inside this section!
Routing guides user requests towards particular actions. You'll discover how to provide a response for any URL within your application.
Let's learn the basics of Blade templates.
Learn Blade directives like @if, @foreach, @forelse to render HTML conditionally and to work with lists.
Let's cleanup the code a little, implement the route that will fetch one task, implement the template and then create the layout template and learn about Blade template inheritance
Let's learn the easiest (yes!) way to run MySQL on any computer!
Let's understand how to connect to the database, how to test if the connections is working and let's understand how it's configured and what are the environment variables.
Understand the database abstraction in Laravel and how database schema changes are done using migrations.
Learn how to generate big sets of fake data and load it into the database
Let's talk about Eloquent Models - how to read data, learn the basics of query builder, and play around with a tool called Tinker.
Learn about view routes, rendering a form and CSRF attack and how to protect against it.
Learn how to validate the user input and then save it into the database.
Learn a little about sessions in Laravel/PHP, showing validation error messages & one-time flash messages.
Learn how to edit the data already in the database. Learn about method spoofing.
A quick video on how to keep the sent values in the form if the form submission fails, so the user does not have to retype everything from scratch (only the invalid values).
Learn how to use the power of Laravel to write less verbose code. Route model binding automatically loads models, mass assignment easily associates submitted data with models and form requests can be a common place for validation rules.
See how to delete records from the database, and how to do that properly and safely on the Blade side!
Learn how you can use the @include directive to create subviews, reusable Blade code chunks using forms as an example.
Learn how easy it is in Laravel to divide results into pages.
Let's add the missing links and then implement the Task completed/not completed toggling feature.
Learn how to set up Tailwind CSS super quickly using Play CDN. Learn what Tailwind is and add some initial styling. Learn how to add CSS classes conditionally.
Let's style the task page. Learn about the Tailwind @apply directive.
Style all the forms.
Style the flash message and learn how to use Alpine.js to make your page dynamic. Alpine.js is super simple and tiny. It's much easier to use than plain JavaScript with DOM.
Let's see the books review project we'll build next!
Create and set up the project, migrations and models.
Define the relationship between 2 models (tables) in both Database and in Laravel. Understand the Laravel conventions about making DB relations.
Learn how to generate more diverse data and how to generate and connect related models.
Learn all the ways to query related data - eager loading and lazy loading. See how to connect models together.
How to extend the query builder with your own methods, that encapsulate some query constraints.
Want to know how many reviews a book has, or what is the average rating? See how!
Create query scopes to sort books by amount of reviews and by the average rating!
I've got a lot of questions under the next video titled "Getting Books with Recent Reviews", so I wanted to clarify what this is video is about!
Learn how to use whereHas to query models based on their relationship.
It's time to learn what a controller is, and then immediately, why you should almost always try to use a resource controller!
Fetching books, adding layout and books template. A lot of code so it takes time!
Let's add the form that filters books by the title!
Let's make a tab to select if you want to see recent books, the highest rated or popular books. This is not as simple as it sounds!
Let's learn how to use the new match expression in PHP. Depending on the value of filter, we will run a specific query scope to filter books.
How to load relations for an already loaded model? When to use lazy loading or eager loading? How to sort the related model by any column? Let's see!
Learn what cache is, how to configure it, when to use it and what to watch out for using query cache as an example.
Cache stays valid for specified amount of time, sometimes though, you want it to invalidate faster, eg. when data changes. Learn how to do that!
We need to refactor the code so it's easy to get the review count and avg rating on any page, without side effects (like sorting by any of those)!
Learn the basics of components in Blade, and create our first one right away - a star rating component!
Let's learn about scoped resource controller, and then make a form for adding reviews!
Learn about rate limiting and how it can be applied through middleware.
We'll build a REST API this time!
Let's create and setup the new REST API project, incl. controllers, models etc.
We need a lot of data to work with, so let's seed the database.
Learn the basics of using Postman, the free and popular REST client that we'll use to manually test and interact with the API we are building.
See how to store data through API, how to validate it and learn a thing or two about HTTP.
Learn how to update and delete data through the API.
How to have full control over what data is being returned from API? Learn about API Resources.
Let's implement the attendee API controller and learn how to use pagination when returning JSON.
Learn how to control what data (relation) is being loaded by using a query parameter.
Let's make a universal trait that lets you load relations of any model or query in every controller by using PHP Traits.
Let's see how to load the Attendee relations.
Let's learn the basics of setting up user authentication, including password hashing, generating tokens using Laravel Sanctum.
Some routes are only for the logged-in users, see how to enforce that.
Copying and pasting the token while in Postman is a lot of work, see how we can automate that!
Let's see how to revoke user tokens and how to sign out.
Let's see how to make simple checks if the user is permitted to do an action on resource using Gates.
Policies allow authorization centered around a resource, let's learn about them.
See more ways on how to authorize with Policy classes, other than using authorizeResource.
Let's build an email reminder about the upcoming events feature, in this video you'll learn about custom artisan commands.
Learn how to schedule tasks to be run later.
How to use Notifications feature to notify users about events by sending an email.
Deferring time consuming tasks to be run in the background, making the UI more snappy.
The API needs throttling to protect your API from excessive usage and potential abuse.
Let's make a dynamic website without the use of JavaScript, by using a technology called Livewire!
Create the Laravel project, set up Livewire.
We need database models & migrations to get started, let's implement all that in this video.
Let's see how can you make a dynamic page without JavaScript by building your first Livewire component.
You will understand how Livewire even works.
How to perform dynamic operations in Livewire.
Let's make a dynamic poll options form.
Learn how to interact with Eloquent from a Livewire component.
See how to write code in a more Laravel fashion, using fluent interfaces.
See how to validate data before you save it.
See how to fetch and pass data to Livewire component.
Learn how to communicate between components using events.
Let's add the final missing feature of voting, and learn how we can use Route Model Binding in actions.
Let's see the Job Portal project we'll build!
Let's create the Job Board project, starting with the Job model, migration and factory.
Let's install a tool that will help you track bottlenecks in your app.
Learn how to setup frontend tooling the way it's done professionally.
Let's build a layout component, learn about slots, and display all job offer titles.
Let's style the Jobs Page, create the Card component and see how to pass additional CSS classes to it.
Format currency, display "tags" with job seniority & category plus job description. Create a "tag" blade component.
Create the single job page and 2 new components: Job Card and Button.
We will create a so called breadcrumbs navigation component.
Let's install forms plugin for Tailwind and design the text inputs for searching for text and salary filtering.
See how to make a simple search engine to search for jobs using text!
Filtering jobs by minimum and maximum salary. Important side note about logical operators precedence in SQL and how to enclose clauses in parenthesis with Eloquent.
Learn how to send and receive the radio button selected option (1 option selected out of many).
Learn how to make a reusable component for automating the form handling when you need to select 1 option out of many (experience, category).
Configure the labels for items in the radio group, but more importantly - learn a bit or two about working with arrays in PHP, and generally seeing how things work in PHP!
Learn how to add a clear button to every input, using a tiny bit of CSS and JavaScript.
Time to refactor: let's change the style a little bit, add links to the Job "tags" allowing for easy filtering. See how to setup your project JavaScript using Vite.
The input clearing feature will be refactored to Alpine.js code. Both solutions are simple enough, though using libraries/frameworks is much better for the long run.
Filtering is a complicated query and as such, you should put it in a place where it can be easily reused. That place is a local query scope inside the model.
Jobs are posted by employers. We need an Employer model to be connected with Jobs.
Making complicated seeders is not trivial. Deciding on the order of data loading. Making sure User is uniquely associated with only one Employer - we'll learn how to deal with that in this video.
It's time to display the actual employer company name and also be able to use "search" feature to find jobs by a company name.
How to fetch the other job offers from a single employer on the job page?
Begin working on authentication by creating the AuthController.
Authentication page & form.
How to actually authenticate users.
Learn how to log out the users safely.
We need to prepare the data model for job applications.
Create the job application controller, use routing groups to make sure some common middleware is applied, create the application form markup.
Handle the job application submissions.
Use Policies to determine who can perform an action against a model, in our case who can "apply" for a "Job".
Let's see how to make a query that will check if the specific user has applied for a job already.
Controller and view showing jobs I applied to.
Showing average asking salary for every job, number of other applicants.
Cancelling (deleting) my job applications.
Let's understand the Laravel abstraction to filesystems, including local files, FTP or S3. It's super easy once you know how it works.
Learn how to actually upload a file, move it to a specified "disk" and record the path of the file with the job application (so it can be later retrieved when needed).
Let's fix the TextInput component to display validation errors and more.
Let's create the label component
Let's display generic flash error messages
To start adding jobs, we require users to create an employer account, let's see how this is done
Middleware can be used to check for specific permissions, and then redirect. We will create a middleware that checks if the user is an employer, and if he's not, redirects him to the employer registration page.
The form markup to add jobs. We will also update the RadioGroup component so it can be used in forms that store data.
The actual logic of adding jobs
Let's see how can we easily fetch different related information about the jobs we have posted, including all the relations.
An editing functionality.
See how to handle more complex scenarios with authorization.
Delete records, but not really. Let's learn about the Soft Delete feature.
Records were "deleted", but somehow we're still able to retrieve them - let's do that!
The PHP ecosystem is still one of the most important parts of the web, and Laravel has become the framework that most teams reach for. If you look at job postings or production apps, Laravel shows up everywhere. The problem is that most tutorials cover only small pieces of the puzzle - you end up with gaps, or you just copy code without understanding how everything fits together.
This course takes you through the entire process of building applications the way you’d actually do it on a real project. We start from the basics, and by the time you’re done you’ll have gone through the complete cycle of building the apps.
You won’t just watch me code - you’ll build five substantial projects that give you practice with the features and patterns developers really use:
Projects you’ll create:
Task List: a simple app to learn the MVC structure, CRUD, forms, and validation.
Book Review System: a relational app with reviews, ratings, advanced queries, and caching.
RESTful API: a backend service with secure endpoints, authentication, and rate limiting.
Livewire Poll App: real-time UI updates with Livewire, no heavy front-end frameworks required.
Full Job Board: a larger SaaS-style application with dashboards, filtering, file uploads, and advanced authentication.
Skills you’ll develop along the way:
Solid understanding of Laravel fundamentals and how to use advanced features when needed.
Writing clean, modern PHP 8 code that follows best practices.
Designing and managing databases with migrations and Eloquent ORM.
Building and securing REST APIs.
Creating interactive user interfaces with Livewire, Alpine.js, and Tailwind CSS.
By the end of the course, you’ll have gone through the full application lifecycle more than once, so you’ll actually understand how things fit together. You’ll be comfortable working with Laravel and PHP in a modern workflow, and you’ll have five projects in your portfolio that show real, practical skills.