自定义Laravel Blade指令始终将布尔值解析为true问题
解决Laravel自定义Blade指令布尔参数判断异常的问题
问题原因
你当前的写法错误在于对Blade指令的参数处理逻辑理解有误:Blade指令的闭包接收的参数是字符串形式的表达式,而非直接的布尔值。比如你在模板写@fadeIn(false),实际传递给闭包的是字符串'false',PHP会把非空字符串强制转为布尔值true,所以不管传true还是false,都会执行if里的代码,返回style="display: none;"。
正确实现方式
修改App\Providers\AppServiceProvider.php中boot()方法里的指令代码,让它生成动态求值的PHP代码,而非直接返回字符串:
use Illuminate\Support\Facades\Blade; public function boot() { Blade::directive('fadeIn', function ($expression) { // 生成PHP代码,对传入的表达式求值后判断输出 return "<?php echo ($expression) ? 'style=\"display: none;\"' : ''; ?>"; }); }
模板用法保持不变
在Blade模板中依然可以这样使用:
<div @fadeIn(false)></div> <!-- 也可以传递变量 --> <div @fadeIn($shouldHide)></div>
生效验证
修改完成后,执行以下命令清除编译后的视图缓存:
php artisan view:clear
现在再访问页面,传入false时就不会再添加display: none样式了。
内容的提问来源于stack exchange,提问作者jj15
相关产品推荐
相关产品推荐

