Laravel Blade模板间传递变量报错:$price未被识别
排查Blade子模板中$price变量未识别的问题
嘿,我来帮你分析这个变量无法被识别的问题,结合你提供的代码片段,大概率是这几个常见原因导致的:
1. 变量名拼写/大小写错误
Blade模板中的变量是大小写敏感的,你需要仔细核对:
- 父模板中传递的变量名是
price:@include('pages.partials.plans_mobile', ['price' => '$30/mo.']) - 子模板中调用的变量名是
$price:{{$price}}
如果其中任何一处拼写有误(比如父模板写成Price,子模板还是$price),就会导致变量无法识别。
2. Blade视图缓存问题
Laravel会自动编译并缓存Blade模板,如果你之前的子模板没有$price变量,后来添加了但没清理缓存,系统可能还在使用旧的编译文件。
解决办法是运行Artisan命令清除视图缓存:
php artisan view:clear
3. 子模板变量被覆盖
检查子模板pages.partials.plans_mobile.blade.php中,有没有在使用{{$price}}之前,通过其他方式重新定义了$price变量?比如:
@php $price = '其他值'; // 这里会覆盖父模板传递过来的变量 @endphp
如果存在这种情况,父模板传递的变量会被覆盖,导致显示错误。
4. 模板路径错误
确认你引入的子模板路径完全正确:
- 确保项目中存在
resources/views/pages/partials/plans_mobile.blade.php文件 - 路径中的大小写、拼写(比如
pagesvsPages,partialsvsPartial)都要完全匹配
如果路径错误,Laravel可能加载了其他模板(或者抛出找不到模板的错误),但如果加载了一个没有$price变量的模板,也会出现这个报错。
快速排查步骤
- 先运行
php artisan view:clear清理缓存,再刷新页面测试 - 逐行核对父模板传参和子模板调用的变量名拼写
- 检查子模板中是否有覆盖
$price的代码 - 确认子模板的文件路径和名称完全正确
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

