Laravel Blade is a powerful templating engine that makes front-end development seamless in Laravel applications. It provides a clean and intuitive syntax while maintaining the ability to write raw PHP when necessary. Blade is packed with features that simplify everyday development tasks, such as handling loops, conditions, components, and layout inheritance. In this post, we’ll explore the most useful Blade features that can enhance your workflow.
1. Blade Templating and Layouts
One of Blade’s most significant advantages is its ability to create reusable layouts. Instead of repeating the same HTML structure across multiple pages, you can define a single layout file and extend it in other views.
Defining a Layout
Create a layout.blade.php
file inside the resources/views
folder:
<!DOCTYPE html>
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<header>@include('partials.header')</header>
<div class="content">
@yield('content')
</div>
<footer>@include('partials.footer')</footer>
</body>
</html>
Extending the Layout
@extends('layout')
@section('title', 'Home Page')
@section('content')
<h1>Welcome to My Laravel Website</h1>
<p>This is the home page content.</p>
@endsection
This approach keeps the code clean, modular, and maintainable.
2. Blade Directives
Blade provides several directives to simplify writing conditional statements, loops, and more. Let’s look at some commonly used ones.
Conditional Directives
@if($user->isAdmin())
<p>Welcome, Admin!</p>
@elseif($user->isModerator())
<p>Welcome, Moderator!</p>
@else
<p>Welcome, User!</p>
@endif
Loop Directives
@foreach($users as $user)
<p>{{ $user->name }}</p>
@endforeach
@for($i = 1; $i <= 10; $i++)
<p>Number: {{ $i }}</p>
@endfor
Empty and Unless Directives
@empty($users)
<p>No users found.</p>
@endempty
@unless($user->isAdmin())
<p>You do not have admin privileges.</p>
@endunless
3. Blade Components
Components allow you to reuse UI elements efficiently. Instead of duplicating HTML structures, create a Blade component.
Creating a Component
Run the following command:
php artisan make:component Alert
This will generate:
- A Blade file:
resources/views/components/alert.blade.php
- A PHP class:
app/View/Components/Alert.php
Using the Component
Define the component inside resources/views/components/alert.blade.php
:
<div class="alert alert-{{ $type }}">
{{ $slot }}
</div>
Use the component in Blade views:
<x-alert type="danger">Something went wrong!</x-alert>
4. Passing Data to Blade Views
There are multiple ways to pass data to Blade views from a controller.
Using compact()
public function index() {
$users = User::all();
return view('users.index', compact('users'));
}
Using with()
public function index() {
return view('users.index')->with('users', User::all());
}
5. Blade Includes
Instead of repeating code, you can include Blade files:
@include('partials.navbar')
You can also pass data:
@include('partials.navbar', ['links' => $navLinks])
6. Blade Loops with Index and Iteration
@foreach($users as $user)
<p>#{{ $loop->iteration }}: {{ $user->name }}</p>
@endforeach
Useful $loop
properties:
$loop->first
– Checks if it’s the first iteration$loop->last
– Checks if it’s the last iteration$loop->index
– Zero-based index$loop->iteration
– One-based index
7. Blade Slots and Named Slots
Blade slots allow you to create flexible components.
Example Component
<div class="card">
<div class="card-header">
{{ $title }}
</div>
<div class="card-body">
{{ $slot }}
</div>
</div>
Using Named Slots
<x-card>
<x-slot:title>Card Title</x-slot:title>
Card Content Here
</x-card>
8. Blade Custom If Statements
You can define custom conditions in AppServiceProvider.php
:
Blade::if('admin', function () {
return auth()->check() && auth()->user()->isAdmin();
});
Usage:
@admin
<p>Welcome, Admin!</p>
@endadmin
Conclusion
Laravel Blade makes template management simple and efficient. Features like layouts, components, directives, and includes help streamline front-end development. By mastering Blade, you can build clean, maintainable, and reusable UI structures for your Laravel applications.
Have you used these Blade features? Share your favorite tips in the comments!