We’re going to look at five Laravel Blade directives you can use to simplify your templates, and learn about some convenient directives that make solving specific problems a cinch! If you’re new to the framework, these tips will help you discover the excellent features of Blade, Laravel’s templating engine.
Let’s get started.
- Check if the user is authenticated
When checking if the user is authenticated, you could check if the user isn’t null:
@if(auth()->user()) // The user is authenticated. @endif
However, Laravel ships with a custom Blade directive that provides the same functionality more cleanly:
@auth // The user is authenticated. @endauth
- Check if the user is a guest
The inverse of the authentication, we can check if the user is not authenticated using the
guest() method on the
@if(auth()->guest()) // The user is not authenticated. @endif
But Laravel also provides a
@guest // The user is not authenticated. @endguest
We can also combine those two directives using the
@guest // The user is not authenticated. @else // The user is authenticated. @endguest
- Include the first view if it exists or includes the second if it doesn’t
Building a website with multiple themes might require including a file if it exists or including another one if it doesn’t, you can easily achieve this with simple blade conditions:
@if(view()->exists('first-view-name')) @include('first-view-name') @else @include('second-view-name') @endif
There is a shorter and a much cleaner directive for including the first found template:
- Include a view based on a condition
Conditionally including a view based on a condition is useful when you only want to add content based on logic like an authenticated user.
You could write this using an
@if($post->hasComments()) @include('posts.comments') @endif
We can more cleanly include a view based on a condition with the
@includeWhen directive with one line:
- Include a view if it exists
If you have custom themes system or you dynamically create your Blade views, then checking if the file exists a mandatory thing to do.
exists method on the view helper will do the trick:
@if(view()->exists('view-name')) @include('view-name') @endif
But it turns out there is a simple way of handling this using the
includeIf Blade directive:
You can learn about these and other useful tricks in the official Blade documentation for improving your frontend templating in a Laravel project.