当我包含扩展基础刀片的刀片模板时,所包含刀片部分中的所有变量仅显示第一次迭代的变量。
阅读它似乎这里的渲染顺序很重要,视图在变量之前呈现,反之亦然。
注意
示例
// index.blade.php
//
@foreach($jobs as $job)
{{ $job->id }} // <-- Correct output, 1,2,3,..N
@include('job-detail', ['id' => $job->id])
@endforeach
然后在作业详细信息刀片
中// job-detail.blade.php
//
@extends('job-base')
A: {{ $id }} // <-- Correct output, 1,2,3,..N
@section('content')
B: {{ $id }} // <-- Incorrect output, 1,1,1,..1 (or whatever the first index is)
@endsection // have also tried @stop
然后在作业基础刀片
// job-base.blade.php
//
@yield('content') // Have also tried @section('content') + @show
答案 0 :(得分:1)
在浏览源代码后,即BladeCompiler
和View/Factory
,我注意到以下代码段:
protected function compileOverwrite($expression)
{
return '<?php $__env->stopSection(true); ?>';
}
在后台,Laravel似乎存储渲染内容(通过包含文件,并以ob_style方式提取当前变量)在键控数组中,视图名称为键。
当stopSection未传递布尔值true时,它会创建一个新键,并且视图将从原始键获取数据。
长话短说,它现在没有记录(5.1+),但可以在5.0的文档中找到: https://laravel.com/docs/5.0/templates
然而,它并没有真正解释为什么&#34;。这个页面似乎解释得更好:
http://laravel-recipes.com/recipes/244/stopping-injecting-content-into-a-section-and-overwriting