在blade视图中进行一些较长的@if()判断,尤其是该判断又经常用到时,会让我们的blade视图变得臃肿难看,好消息是,在laravel 5.5里,我们可以自定义一些常用的if判断,将其定义成简洁的blade标签。
@if (auth()->check() && auth()->user()->isSubscribed())
<p>Subscribed</p>
@else
<p>Not Subscribed</p>
@endif就可以写成:
@subscribed
<p>Subscribed</p>
@else
<p>Not Subscribed</p>
@endsubscribed那么,要创建这样的一个@subscribeblade标签,需要在我们的AppServiceProvider里面去定义一下:
[...]
use Illuminate\Support\Facades\Blade;
class AppServiceProvider extends ServiceProvider
{
[...]
public function boot()
{
Blade::if('subscribed', function () {
return auth()->check() && auth()->user()->isSubscribed();
});
}
[...]
}有时候我们的判断里需要传递参数,比如这样:
@if (auth()->check() && auth()->user()->isFollowing($user->id))这个时候在Blade::if()的回调函数里传入参数即可:
Blade::if('following', function (User $user) {
return auth()->check() && auth()->user()->isFollowing($user->id)
});然后实际使用中可以这样来调用:
@following($user)
<p>Following</p>
@else
<p>Not Following</p>
@endfollowing当然这个之前的版本里也是可以自定义的,不然我们之前Entrust课程里涉及的@role @ability这些都怎么来的?