Laravel路由可选变量失效:视图提示$id变量未定义
解决Laravel路由传递变量到视图的问题
嘿,这问题其实挺常见的——你虽然在路由闭包里正确定义了可选参数$id,但完全没把这个变量传递给视图文件,这才导致Blade模板找不到$id变量,既没法正常渲染还抛出了"Undefined variable: id"的错误。
问题根源
你的路由代码里,return view('test')这一行没有携带任何变量,视图test.blade.php自然无法获取到$id的值,最终只能把原生的Blade语法原样输出,同时报错变量未定义。
修复方案
只需要把$id变量传递给视图即可,Laravel提供了几种简单的方式:
方法1:使用with()方法
Route::get('/test/{id?}', function ($id = 1) { return view('test')->with('id', $id); });
方法2:直接传递数组参数
Route::get('/test/{id?}', function ($id = 1) { return view('test', ['id' => $id]); });
方法3:用compact()简化代码
如果变量名和视图里使用的键名一致,还可以用PHP的compact()函数来简化代码:
Route::get('/test/{id?}', function ($id = 1) { return view('test', compact('id')); });
验证效果
现在不管你访问http://laravel.test/test(会使用默认值1)还是http://laravel.test/test/1,视图都会正确渲染成:
This is a test: 1.
这样就完全解决你的问题啦!
内容的提问来源于stack exchange,提问作者Luis Martin
相关产品推荐
相关产品推荐

