Topics Blade Templating Directives & Control Structures
intermediate 14 min read

Directives & Control Structures

Built-in Blade directives, custom directives, conditionals, loops, and the @use directive in Laravel 13.

Blade Directives

{{-- Conditionals --}}
@if (count($items) > 0)
<p>{{ count($items) }} items</p>
@elseif (isset($fallback))
<p>Using fallback</p>
@else
<p>No items</p>
@endif

@unless ($user->isBanned)
<p>Welcome!</p>
@endunless

@isset($user)
<p>{{ $user->name }}</p>
@endisset

@empty($items)
<p>No items found</p>
@endempty

{{-- Loops --}}
@foreach ($users as $user)
@if ($loop->first)
<li class="first">{{ $user->name }}</li>
@else
<li>{{ $user->name }}</li>
@endif
@endforeach

@forelse ($posts as $post)
<article>{{ $post->title }}</article>
@empty
<p>No posts yet.</p>
@endforelse

{{-- Laravel 13: @use directive for using classes in templates --}}
@use(\App\Models\User)
<p>Total users: {{ User::count() }}</p>

Custom Directives

// In AppServiceProvider::boot()
Blade::directive("datetime", function (string $expression) {
return "<?php echo (\$expression)->format('Y-m-d H:i'); ?>";
});

// Usage: @datetime($post->created_at)

Examples

<?php
// Blade template example using @forelse and \$loop
// @forelse(\$users as \$user)
//     <tr class="{{ \$loop->even ? 'bg-gray-50' : '' }}">
//         <td>{{ \$loop->iteration }}</td>
//         <td>{{ \$user->name }}</td>
//     </tr>
// @empty
//     <tr><td colspan="2">No users</td></tr>
// @endforelse

Your Notes

Sign in to take notes for this lesson.

Discussion

Sign in to join the discussion.

Flashcards

Sign in to create flashcards.