Laravel中如何让@include引入的视图不继承父视图的变量
方案1:直接用view辅助函数替代@include(无需额外配置)
原生@include默认强制继承父视图所有变量,没有开关可以关闭这个特性。你可以直接用视图渲染语法替代@include,就能实现仅传递指定变量,父视图的所有变量都不会传入子视图:
{!! view('your.subview.path', [ // 只有这里定义的变量会传递到子视图 'custom_param1' => $val1, 'custom_param2' => $val2 ])->render() !!}
方案2:用@component指令实现(完全符合文件存放要求)
@component指令完全支持自定义视图路径,不需要把组件放到默认的resources/views/components目录下,你可以直接指定你同目录下的includes文件路径,且它默认不会继承父视图的任何变量,只有你显式传递的参数才会被子视图获取:
{{-- 直接传入你的子视图相对路径即可 --}} @component('mything.guest.buyer.layout.includes.myspecialtableheader', [ 'header_list' => $headers ]) {{-- 没有插槽内容可以省略这部分,直接写@endcomponent --}} @endcomponent
方案3:匿名组件自定义路径调用
如果你想用<x-xxx/>的组件调用语法,也不需要把文件放到默认组件目录,直接用全路径的点语法调用即可,同样不会继承父视图变量:
<x-mything.guest.buyer.layout.includes.myspecialtableheader :header-list="$headers" />
如果觉得全路径太长,你也可以在config/view.php的components配置项中注册自定义路径前缀,简化调用写法。
内容的提问来源于stack exchange,提问作者Toskan
相关产品推荐
相关产品推荐

