Laravel Blade未定义变量错误,但变量已定义

问题描述

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

    <?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()呼叫输出:

“ site1”

作为字符串。

解决方法

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

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

因此在控制器中,而不是:

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

我做到了:

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

为此,我不得不将@if条件包装在另一个@if条件中,检查$site变量是否为isset()

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...