Laravel 5.8 Voyager 1.2:父视图无法获取子视图变量问题求助
解决Laravel Blade父视图访问子视图变量的问题
嘿,这个问题我之前也碰到过,咱们一步步来理清楚:
首先得明白Blade的@include是有独立作用域的——子视图里定义的变量默认只在子视图内部生效,父视图根本拿不到。你子视图里的$i是循环的局部变量,循环结束后这个变量就跟着子视图的作用域一起“消失”了,所以父视图里调用{{$i}}才会报“Undefined variable”的错误。
下面给你两个靠谱的解决方案:
方案一:子视图主动共享变量到父作用域
直接修改你的child.blade.php,在循环结束后把$i共享到父视图的作用域里:
@for($i=1; $i<5; $i++) {{$i}} @endfor {{-- 把循环后的$i共享给父视图 --}} @php $__env->share('i', $i); @endphp
$__env是Blade的环境实例,调用它的share方法就能把变量全局共享,父视图自然就能拿到最后循环的$i=4了。
方案二:父视图初始化变量,子视图通过引用修改
先在父视图里初始化$i,然后通过引用传递的方式传给子视图,这样子视图里对$i的修改会直接同步到父视图:
parent.blade.php
@php $i = 0; // 先初始化变量 @endphp @include('vendor.voyager.test.child', ['i' => &$i]) {{$i}} {{-- 这里会输出4 --}}
child.blade.php
@for($i=1; $i<5; $i++) {{$i}} @endfor
这种方式要注意传递变量时的&符号,它表示传递的是变量的引用,而不是副本,所以子视图里的修改会直接作用到父视图的变量上。
两种方法都能解决你的问题,选哪种看你自己的场景偏好~
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

