【问题标题】:Laravel Blade Undefined Variable Error But The Variable Is DefinedLaravel Blade未定义变量错误但变量已定义
【发布时间】:2020-11-30 08:41:07
【问题描述】:

这是一个非常奇怪的错误。在我的刀片视图中:

    <?php //dd($site); ?>
    @if($site==='site1')

在第二行 @if($site==='site1') 我收到 Undefined variable: site 错误。但是,如果我取消注释转储并死掉,我会得到 $site 变量集。从字面上看,它在下一行告诉我它在刀片中没有设置 $site 变量。我的 if 语句的语法是否错误?

对我来说看起来是正确的,文档给出了:

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

@if 和第一个括号( 之间添加一个空格没有区别。

我尝试清除视图缓存,但这也没有什么不同。其他所有更改都会被注册,例如,如果我删除了变量名前面的$,我会得到一个未定义的常量错误。我在本地开发。

我完全不知所措,因为即使变量在刀片中的深度为三个级别,我也正确地传递了它,并且我通过转储确认它并死亡。条件只是不会拿起它。

我像这样将它传递到视图中:

 @component('pages.common.component.mycomponent',['site'=>$site])  
 @endcomponent

像这样再上一级:

 @component('pages.common.parent.mycomponent',['site'=>'site1'])  
 @endcomponent

任何想法我都会非常感激!

编辑:

dd() 调用输出:

“站点 1”

作为字符串。

【问题讨论】:

  • 嗨@JeanneDark 谢谢,但不确定你的意思。如果我删除 ?&gt; 并将其移至第二行下方,它将无效,因为第二行是刀片语法而不是 php 语法。如果我将整个第一行移到第二行下方,我只会在它到达转储并死掉之前得到错误。也许我误解了你。
  • 我们可以看到结果dd($site); 吗?
  • 这是一个错误,已在 7.1.3 上修复 github.com/laravel/framework/issues/31919
  • @xNoJustice 已更新。
  • @sta 看起来不同,涉及类。这里我只是通过多个刀片组件传递一个变量。

标签: php laravel laravel-blade


【解决方案1】:

答案稍后在第二级(我遇到错误的组件的父级)中,对第三个组件有两个声明,其中一个没有传递$site 变量。当然,因为我在第三个组件中使用了内联 dd() 调试方法,所以起初它没有意义,因为它到达了第一个声明而不是第二个。

对我有帮助的是在整个视图上调用 render 方法并将其作为字符串输出,因此我可以在第一个声明中看到它,但在第二个声明中没有。

所以在控制器中,而不是:

return view('pages.routes.parent', $params);

我做到了:

dd(view('pages.routes.parent', $params)-&gt;render()); 将整个视图作为一个字符串输出来跟踪我丢失数据的位置。检查 storage 编译的视图并没有帮助,因为它们是每个组件或视图特有的部分。

要注意这一点,我必须将@if 条件语句包装在另一个@if 条件语句中,检查$site 变量是否为isset()

希望这可以在将来对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 2014-10-09
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2020-03-03
    • 1970-01-01
    相关资源
    最近更新 更多