Laravel中控制器传参至Blade提示变量未定义问题排查
问题解决:Blade视图提示变量未定义,但控制器已传参的问题
你的代码存在三个关键错误,导致视图无法获取到$a和$b变量:
1. 路由配置完全错误
当前的/about路由闭包里,你调用AboutController::info()后,把这个方法返回的视图对象赋值给了name变量,然后又自己返回了一个新的view('about')。这相当于完全忽略了控制器里传递的$a和$b,直接返回了一个没有任何自定义变量的视图,自然会提示变量未定义。
正确的路由应该直接指向控制器的方法,让Laravel来处理视图渲染:
Route::get('/about', [AboutController::class, 'info']);
2. Blade模板存在语法错误
Blade指令(@extends、@section)后面不需要加分号,分号会被当成普通文本输出,同时干扰Blade的模板解析,可能导致变量无法正常渲染。
修正后的about.blade.php:
@extends('layout.template') @section('homeContainer') <p> {{ $a }} </p> <br> <p>{{ $b }}</p> @endsection
3. 模型方法名大小写不一致(潜在问题)
模型里定义的方法是Info()(大写开头),但控制器里调用的是AboutModel::info()(小写开头)。虽然PHP对静态方法调用的大小写不敏感,但这种不一致可能会导致后续维护时出现混淆,建议统一成小写:
// AboutModel.php public static function info(){ $a = "This value is from model"; return $a; }
为什么之前dd看起来正常?
你在控制器里用dd($a)和dd($b)能看到值,是因为控制器的方法确实执行了,但路由闭包的逻辑覆盖了控制器返回的视图,最终渲染的是路由里重新返回的空参数视图,所以视图里找不到变量。
内容的提问来源于stack exchange,提问作者Rafly Andrian
相关产品推荐
相关产品推荐

