Laravel Blade - 通过 @include 或 @yield 传递变量

10

我需要将一个变量传递给一个包含的Blade文件。我已经尝试了两种方式,但都没有成功。

  1. 将变量title传递给包含的文件:

    @section('left')
        @include('modal', ['title' => 'Hello'])
    @stop
    
  2. 使用@yield并设置section:

  3. @section('left')
        @include('modal')
            @section('title')
            Hello
            @stop
    @stop
    

我正在使用 Laravel 4.2。我不确定我正在尝试的是否可能,但我想象它是可以实现的。


你是如何尝试输出它的?第一个选项绝对有效。 - Tim
由于某种原因,它不喜欢 [] 括号。但是使用 array('title' => 'hello') 是可以的。 - monster
你使用的是哪个PHP版本?简写数组在PHP 5.4中被引入。 - Tim
2个回答

14
根据文档,应该使用include方式来实现子视图的包含:

包含子视图

@include('view.name')

您还可以将数据数组传递给已包含的视图:

@include('view.name', array('some'=>'data'))

我的直觉是,$title 在嵌套模板中与另一个变量冲突了。 为了进行故障排除,请暂时将其更改为其他名称。

这个可以工作,但不知道为什么它不喜欢 [] 方括号。如果使用 yield 的方式,它是如何工作的 - 如果这是正确的方式? - monster
是的 - 你说得对!谢谢。这是Laravel中做事情的首选方式吗?也就是说,大量包含和传递变量以重用模板? - monster
好的,当然可以!我需要将@include(...)作为变量传递(以填充我要包含的项目)。这可能吗?所有似乎发生的事情都是它打印出'@include(...)'。 - monster
1
我不确定,但如果你需要像那样嵌套它,请尝试 ['someVar' => view('my.view')]。我更喜欢做类似于 @include('viewA', ['subview' => 'viewB']) 的事情,并在 viewA.blade.php 中使用 @include($subview)。只是随意想象而已。 - rdiz
我认为@include表达式在Blade语法的其余部分之前被评估,因此括号内的内容必须是纯PHP。在纯PHP中,'{{$subview}}'只是一个由几个花括号、美元符号等组成的字符串,而"{$subview}"(注意双引号)或者仅仅是$subview会像你期望的那样工作(将include视为一个简单的函数),因为它们被解释为正常的PHP代码。 - rdiz
显示剩余3条评论

6
将数据数组传递到包含的视图中。
@include('view.name', array('some'=>'data'))

然后将其应用于视图/名称文件夹。
{{ $some }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接