Skip to content

Laravel 5.5 – Custom Blade::if() Directives

Last updated on February 17, 2018

In Laravel 5.5, writing custom blade if Directives is pretty easy. Using this new feature, you can write simplified and clean if statements in your views.

Imagine, you have to check, if the user is admin or not, in this situation you general check for two conditions first you will check whether the user is logged in or not then you will check for his role. Before Laravel 5.5, we did something like below shown in the view file.

@if (auth()->check() && auth()->user()->is('admin'))
    

Welcome, Admin

@else

Welcome, User

@endif

What if you have to check for admin in several areas, repetitive checks within blade templates can make our templates ugly. The new Blade::if() makes it convenient to abstract repetitive checks out of templates, making them more readable

@admin
    Welcome, Admin.
@else
    Welcome,User.
@endadmin

Writing Custom Blade::if() Directives

The logic for creating a custom blade directive goes inside the boot method of the app/Providers/AppServiceProvider.php class

....
use Illuminate\Support\Facades\Blade;
...
class AppServiceProvider extends ServiceProvider
{
    ....
    ....
    public function boot()
    {
        Blade::if('admin', function () {
            return auth()->check() && auth()->user()->role('admin');
        });
    }
    ....
    .... 
}

How to pass parameters

You can also pass parameters to custom directives, for example, to check user role

@is('admin')
    Welcome, Admin.
@else
    Welcome, User.
@endadmin

And you can write your blade directive as below shown

....
....
use Illuminate\Support\Facades\Blade;

class AppServiceProvider extends ServiceProvider
{
    ....
    ....
    public function boot()
    {
        Blade::if('is', function ($role) {
            return auth()->check() && auth()->user()->is($role);
        });
    }
    ....
    ....
}
0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments