Laravel8新增数据报Undefined variable: UserRegistration错误
问题根因
报错是因为新增、编辑场景共用了registration.blade.php表单视图,但新增对应的signup控制器方法没有向视图传递$UserRegistration变量,视图中所有调用$UserRegistration->xxx属性的代码在新增场景下找不到对应变量,直接触发报错。
另外你视图里城市下拉的选中判断写了$UserRegistration->state,属于笔误,后续会导致城市选项无法正确回显。
修复步骤
1. 修改控制器signup方法
在新增场景的方法中传入一个空的UserRegistration模型实例,保证视图能拿到对应变量:
public function signup(){ $url = url('/usersignup'); $title = "Student registration form"; $btntitle = "Submit"; // 传入空模型实例 $UserRegistration = new UserRegistration(); $data = compact('url','title','btntitle','UserRegistration'); return view('registration')->with($data); }
2. 优化视图取值逻辑
把视图中所有直接取$UserRegistration属性的代码,改成兼容旧输入、空值的写法,同时修正城市下拉的判断笔误:
- 普通文本输入框示例(以First name字段为例):
<input type="text" id="form3Example1m" name="Fname" class="form-control form-control-lg" value="{{ old('Fname', $UserRegistration->Fname ?? '') }}" />
- 单选框示例(以Male选项为例):
<input class="form-check-input" type="radio" name="gender" id="femaleGender" value="M" {{ old('gender', $UserRegistration->gender ?? '') == 'M' ? 'checked' : '' }} />
- 下拉选项示例(以Khulna的州选项为例):
<option value="Khulna" {{ old('state', $UserRegistration->state ?? '') == 'Khulna' ? 'selected':''}}>Khulna</option>
- 城市下拉修正笔误,把判断条件里的
state改成city:
<option value="Khulna" {{ old('city', $UserRegistration->city ?? '') == 'Khulna' ? 'selected':''}}>Khulna</option>
写法说明
old('字段名', 默认值)是Laravel自带的辅助函数,优先读取上次表单提交闪存的输入值,适配表单验证失败跳转回页面的回显场景,没有旧值时才读取后面传入的默认值?? ''是空合并运算符,当变量不存在或者属性不存在时直接返回空字符串,彻底避免未定义变量、访问空对象属性的报错- 所有字段都按照上面的格式替换即可,编辑场景下会自动读取模型的已有值做回显,新增场景下默认是空值,不会再触发报错。
内容的提问来源于stack exchange,提问作者Shykat Roy NDUDUgCyEt
相关产品推荐
相关产品推荐

