代码之家  ›  专栏  ›  技术社区  ›  Andrea Marco Sartori

Laravel 4-渲染递归@include

  •  3
  • Andrea Marco Sartori  · 技术社区  · 10 年前

    我希望获得带有递归@include标记的模板的渲染字符串。不幸的是 render() 方法不支持递归性:

    return View::make('bind', $data)->render();
    

    这是我的观点:

    {{$namespace}}\Decorators\{{$decorators[$i++]}}
    <?php $tab = str_repeat("\t", $i) ?>
    
    {{$tab}}(
        {{$tab}}new @if(count($decorators) < $i)@include('bind')@endif
    
    {{$tab}})
    

    这是我应该得到的:

    Workflows\Decorators\Foo
    (
        new Workflows\Decorators\Bar
        (
            new 
        )
    )
    

    这就是我得到的:

    Workflows\Decorators\Foo
    (
        new @include('bind')
    )
    

    然而,如果我显示视图而不是呈现它,我可以看到正确的源代码。

    有没有递归渲染视图的方法?

    1 回复  |  直到 10 年前
        1
  •  2
  •   bishop    10 年前

    Laravel要求 @ 指令显示在单独的行上。换一种说法,每行只有一个。在某些情况下,Laravel会给你一个编译错误:在其他情况下,你只会得到神秘的结果(就像你的情况一样)。

    因此,按如下方式重写代码,它应该可以工作:

    @if (count($decorators) < $i)
        @include('bind')
    @endif