Custom if tags to clean up your Blade templates.
If you're building a SaaS, you'll eventually start accumulating a lot of if
statements that display one version of content for pro users (your paying subscribers), your free uses (if you have a free tier), and your guest users (those not logged in).
You can use @if
directives in your Blade templates for this, but eventually it starts getting ugly, especially if the conditions are long and complex.
@if (auth()->user()->isProUser())
<button>Click here</button>
@endif
@if (auth()->user()->isFreeUser())
<button>Upgrade</button>
@endif
@guest
<button>Sign up</button>
@endif
It'll be better if it can look like this instead.
@pro
<button>Click here</button>
@endpro
@free
<button>Upgrade</button>
@endfree
@guest
<button>Sign up</button>
@endguest
Well you can do that with Blade's custom if statements.
Just add the following to your AppServiceProvider
's boot method:
public function boot()
{
Blade::if('pro', function () {
if (auth()->guest()) {
return false;
}
return auth()->user()->isPro();
});
Blade::if('free', function () {
if (auth()->guest()) {
return false;
}
return auth()->user()->isOnFreeTier();
});
}
More on growing my indie SaaS business at https://farez.substack.com.