php - Laravel 在自定义刀片指令中使用数据库中的变量
问题描述
概括
自定义刀片指令在不先清除视图缓存的情况下不使用数据库中的当前值。由于用户可以更改该值并影响视图,因此我需要该指令始终从数据库中提取当前值,而不是使用缓存的值(这适用于 @auth 之类的指令,那么为什么不使用我的自定义指令呢?)。
背景
我使用本教程编写了一个自定义指令,它的作用基本相同,根据存储在数据库中的值显示不同的内容。我遇到的问题是,如果变量从 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 状态。
解决方案
Blade 正在缓存自定义指令的返回字符串,但如果该字符串是 PHP 代码,则会在访问缓存视图时对其进行评估。您可以做的是在返回字符串中包含整个条件逻辑,如下所示:
\Blade::directive('signup_done', function () {
return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});
它可能不是最好的解决方案,但应该是可行的。
推荐阅读
- javascript - swiper.js - 销毁后出现“this.params is undefined”错误(真,真)
- angular - 比较Angular中自定义验证器中的值
- javascript - this 关键字在 JS 中究竟是如何工作的?
- javascript - npm标准版补丁版本问题
- angular - Angular Rxjs repeatWhen:当所有状态都未完成时
- image - Windows 应用程序 (C#) - 进程无法访问该文件,因为它正被另一个进程使用
- macos - user.Lookup 在用户不存在时返回用户
- spring-boot - Spring Boot Docker 容器端口转发不起作用
- mongodb - MongoDB OR 不在顶级
- linux - 如何在 Linux 上找到包含特定文本但不在子目录中的所有文件?