在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这些都怎么来的?

最后修改:2023 年 03 月 07 日
如果觉得我的文章对你有用,请随意赞赏