Laravel在自定义刀片指令中使用数据库中的变量

时间:2019-01-19 18:30:47

标签: php laravel laravel-blade

摘要

自定义刀片指令不会在不先清除视图缓存的情况下使用数据库中的当前值。由于该值可以由用户更改并影响视图,因此我需要该指令始终从数据库中获取当前值,而不要使用缓存的值(这适用于@auth等指令,为什么不使用我的自定义值呢?)。

背景

我已经使用this tutorial编写了一个自定义指令,基本上,同一件事根据存储在数据库中的值显示不同的内容。我遇到的问题是,例如,如果变量从false变为true,则指令被旧值卡住了,而在数据库中更改时它不会更新它。当我清除视图缓存时,它确实起作用,但是我希望它始终使用存储在数据库中的当前值。

代码

\Blade::directive('signup_done', function () {
    $condition = false;

    if (\Auth::check()) {
        if (\Auth::user()->signup_done) $condition = true;
    }

    return "<?php if ($condition) { ?>";
});

预期结果与实际结果

signup_done默认是每个用户的false,如果它更改为true,我希望该指令输出true,但是在清除视图缓存之前,它一直停留在false。 / p>

1 个答案:

答案 0 :(得分:0)

Blade正在缓存您的自定义指令的返回字符串,但是如果该字符串是PHP代码,则将在访问缓存的视图时对其进行评估。您可以做的是在返回字符串中包含整个条件逻辑,如:

\Blade::directive('signup_done', function () {
    return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});

这可能不是最好的解决方案,但它应该是可行的。