Laravel Blade is one of the most powerful and advanced templating engine as compared to other templating engines such as Smarty and Twig.
- Control Structures
@if, @elseif, @else, @endif
Conditional logic.
@if ($user->isAdmin())
Welcome, admin!
@elseif ($user->isModerator())
Welcome, moderator!
@else
Welcome, guest!
@endif
@unless / @endunless
Reverse of @if.
@unless ($user->isBanned())
You can access the forum.
@endunless
@isset / @endisset
Checks if a variable is set.
@isset ($profile)
{{ $profile->bio }}
@endisset
@empty / @endempty
Checks if a variable is empty.
@empty ($notifications)
You have no notifications.
@endempty
- Loops
@for / @endfor
Classic for-loop.
@for ($i = 0; $i < 5; $i++)
Number: {{ $i }}
@endfor
@foreach / @endforeach
For collections or arrays.
@foreach ($users as $user)
{{ $user->name }}
@endforeach
@forelse / @empty / @endforelse
foreach with a fallback if empty.
@forelse ($comments as $comment)
{{ $comment->body }}
@empty
No comments found.
@endforelse
@while / @endwhile
Basic while loop.
@while ($count < 3)
Count: {{ $count++ }}
@endwhile
- Authentication & Authorization
@auth / @endauth
Content for authenticated users.
@auth
Welcome back, {{ auth()->user()->name }}!
@endauth
@guest / @endguest
Content for unauthenticated users.
@guest
<a href="/login">Login</a>
@endguest
@can / @endcan / @cannot / @endcannot
Laravel policies or gates.
@can('update', $post)
<a href="#">Edit Post</a>
@endcan
@cannot('delete', $comment)
You cannot delete this comment.
@endcannot
@canany / @endcanany
If the user has any of the listed abilities.
@canany(['update', 'delete'], $post)
<p>You can edit or delete this post.</p>
@endcanany
- Environment & Section Management
@env / @endenv
Conditionally render for environments.
@env('local')
<p>App is running in local</p>
@endenv
@env(['staging', 'production'])
<p>Staging or Production</p>
@endenv
@production / @endproduction
Production environment.
@production
<p>Production environment</p>
@endproduction
@section / @endsection
Define content sections for layouts.
@section('content')
<p>This is the page content</p>
@endsection
@yield
Used in layouts to show section content.
<body>
@yield('content')
</body>
@extends
Extend a layout.
@extends('layouts.app')
@include
Include another view.
@include('partials.header')
@include('partials.sidebar', ['menu' => $menu])
@includeIf / @includeWhen / @includeUnless
Conditional includes.
@includeIf('partials.footer')
@includeWhen($showSidebar, 'partials.sidebar')
@includeUnless($isGuest, 'partials.user-info')
@each
Loop through and render a partial.
@each('partials.comment', $comments, 'comment')
@stack / @push
The stack directive allows you to render content somewhere else in another view or layout. By using the push directive you can add content to a stack. This is often used to render JavaScript and CSS includes.
For example, on the blog detail view we could push a JavaScript file that needs to be included. We can do this by pushing the HTML to the scripts stack.
@push('scripts')
<script src="/blog-detail.js"></script>
@endpush
In the <head> tag of the layout we could render the complete stack contents by using the stack directive and passing the name of the stack, scripts in this case.
<head>
<!-- Your head content -->
@stack('scripts')
</head>
- Components & Slots
@component / @slot / @endcomponent
For inline component-like templates.
@component('components.alert')
@slot('title')
Error
@endslot
Something went wrong!
@endcomponent
@props
Used in Blade component files to define props.
@props(['type' => 'info'])
<div class="alert alert-{{ $type }}">
{{ $slot }}
</div>
- Verbatim & Raw Output
@verbatim / @endverbatim
Prevent Blade from parsing.
@verbatim
<script>
let data = {{ $rawJson }};
</script>
@endverbatim
{!! !!}
Unescaped output.
{!! $html !!}
- PHP and Debugging
@php / @endphp
Write raw PHP.
@php
$status = 'active';
@endphp
@dd / @dump
Debug inside Blade.
@dd($user) @dump($posts)
- Switch Statement
@switch / @case / @break / @default / @endswitch
@switch($role)
@case('admin')
Admin Panel
@break
@case('editor')
Editor Panel
@break
@default
User Dashboard
@endswitch
- Comments
Blade comment (not shown in HTML).
{{-- This is a Blade comment --}}
- Other Useful Directives
@csrf
Generates CSRF token input.
<form method="POST">
@csrf
</form>
@method
Spoof HTTP method for forms (e.g., PUT, DELETE).
<form method="POST">
@method('PUT')
</form>
@error / @enderror
Show validation errors.
@error('email')
<div>{{ $message }}</div>
@enderror
@json
<script>
var users = {!! json_encode($users) !!};
</script>
// translates to
<script>
var users = @json($users);
</script>
Source: Orkhan Alishov's notes