Laravel Blade通过@include传递带字符串的变量会导致错误。

106
在 Laravel 5.0.27 中,我使用以下代码包含一个带有变量的视图:
@include('layouts.article', [
        'mainTitle' => "404, page not found",
        'mainContent' => "sorry, but the requested page does not exist :("
    ])

我出现了以下错误...

FatalErrorException syntax ... error, unexpected ','

我已经排除了错误仅来自于“mainContent”变量字符串中的“(”符号,当我去掉“(”符号时,错误就消失了,一切运行正常。我在文档中找不到任何关于此或类似错误的信息。

请问有人知道这是否是预期行为,还是应该报告此Bug?

非常感谢您的时间!


我不确定这个答案,尝试在空格键后加上“(”吧。@joey - Kornkrit Leelhaphunt
这似乎是一个错误。可以使用某种转义方法使其正常工作,但默认情况下它应该按原样工作! - Alupotha
3
可以将此错误报告给https://github.com/laravel/framework/issues。 - Margus Pala
谢谢大家,我已经将它报告为一个 bug,链接在这里:https://github.com/laravel/framework/issues/8502 - joeyfb
太好了!你能否回答一下你的问题或者做些什么,让它不再出现在php/未回答列表中?谢谢! - Rob_vH
可能会很好地利用 @component - Alex
3个回答

157

这不是一个bug,而是由于正则表达式的限制造成的blade语法问题。解决方案来自github:

The problem is using multi-line. You can only use a single line to [pass variables] in Blade, since syntax is limited [by regular expressions]

Try the code below and you should be good to go:

@include('layouts.article', ['mainTitle' => "404, page not found", 'mainContent' => "sorry, but the requested page does not exist :("])

这个问题声称在5.6版本中仍然无法工作,但应该很快就会解决,不过对于是否已经实现了这个问题还没有更新。https://github.com/laravel/framework/issues/8502 - joeyfb

40

5.8v中,包含的视图会继承父级视图中所有变量,如文档所述:

尽管包含的视图将继承父视图中可用的所有数据,但您也可以向包含的视图传递额外的数据数组:

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

1
不知道为什么人们要踩它! - Alauddin Ahmed
我也看不出原因。 - Matteus Barbosa
我对这个答案进行了负评,因为它没有回答实际问题。问题的前提是包含具有特定变量包含和格式的断点,请参阅我的Github问题以了解其内容:https://github.com/laravel/framework/issues/8502 - joeyfb
嗨,有没有可能附加一种@only关键字来限制访问所包含的上下文?我是在与twig中的'only'关键字相关的问题 - Tomk07

30
您可以传递一个 $data 数组。
<?php $data=[
        'mainTitle' => "404, page not found",
        'mainContent' => "sorry, but the requested page does not exist :("
    ]  ?>
@include('layouts.article', $data)

layouts.article中使用$data['mainTitle']等内容


1
请不要这样做。在Blade文件中不需要使用PHP标签。你不仅不需要$data,而且应该在控制器中完成所有的PHP处理。 - Adam Mudd
1
你可以在 <?php ... ?> 中使用 @php@endphp 标签,以保持 Blade 的一致性。 - Anthony Kal

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