在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
那么,要创建这样的一个@subscribe
blade标签,需要在我们的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
这些都怎么来的?