Blade::if() Directives
Published on by Paul Redmond
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:
???? Go crazy with Blade directives. The simplest things can abstract away tons of visual noise from your templates. pic.twitter.com/p5udGWJkhd
— David Hemphill (@davidhemphill) June 22, 2017
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!