在自定义Blade :: if指令

时间:2019-06-22 09:19:41

标签: php laravel laravel-blade

假设我有一个自定义的刀片if指令,我要在其中检查视图中是否存在变量

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Blade::if("exists", function() {
            return isset($model);
        });
    }
}

当前,表达式isset($model)将在$model的上下文中检查变量AppServiceProvider

即使我可以先传递模型然后进行修改,我还是在寻找一种无需传递任何信息的解决方案

如何在视图的上下文中获取要评估的指令,或者如何获取传递到视图的数据?

查看示例:

<button type="submit">
@exists
    Save
@else
    Create
@endexists
</button>

控制器

return view("<path/to/view>", ["model" => $model];

1 个答案:

答案 0 :(得分:0)

您所做的只是完美的,但是您应该将$model参数传递给@exists指令,如下所示:

@exists($model)
<h1>It is there! :)</h1>
@else
<h1>It is not there! :(</h1>
@endexists

,您应该将$model作为参数传递给新指令

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Blade::if("exists", function($model) {
            return isset($model);
        });
    }
}

有关此主题的更多信息,请检查laravel文档中的Custom If Statements