Blade::if() Directives

A new Blade addition in Laravel 5.5 will add support for simplifying custom if statements in your views.

The syntax might something like this in your AppServiceProvider::boot() method:

use Illuminate\Support\Facades\Blade;

Blade::if('admin', function () {
    return auth()->check() && auth()->user()->isAdmin();
});

The new Blade::if() makes it convenient to abstract repetitive checks out of templates, making them more readable:

@admin
    <a href="{{ route('super.secret') }}">Secret Page</a>
@else
    Welcome Guest. <a href="{{ route('login') }}">Login</a>
@endadmin

In previous versions of Laravel, you would have to write a bit more code. For example, David Hemphill tweeted some really cool directives using this technique in Laravel 5.4:

Which is now simplified even more in Laravel 5.5:

Blade::if('prod', function () {
    return app()->environment('production');
});

You can also pass arguments to make the checks more dynamic:

Blade::if('env', function ($env) {
    return app()->environment($env);
});

Which would then look like this in your templates:

@env('production')
  <script src="some-prod.js"></script>
@endenv

If you want to learn more about Blade::if(), Laracasts has a video tutorial on it, and we look forward to seeing what you’ll come up with!