You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:51:37