如何在Laravel 8 Jetstream注册页面获取Role模型数据渲染下拉选择框
解决方案
方式一:直接在Blade模板中查询(适合小型项目快速开发)
- 第一步:在
register.blade.php文件顶部导入Role模型,同时查询所有角色数据:
@use App\Models\Role; @php $roles = Role::all(); @endphp
- 第二步:在需要展示下拉菜单的位置插入以下代码:
<div> <label for="role_id">角色</label> <select id="role_id" name="role_id" required> <option value="" disabled selected>请选择您的角色</option> @foreach ($roles as $role) <option value="{{ $role->id }}" @selected(old('role_id') == $role->id)> {{ $role->name }} </option> @endforeach </select> @error('role_id') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror </div>
注:该方式不符合MVC架构规范,仅推荐测试或小型项目使用
方式二:从控制器传参(规范写法,推荐使用)
步骤1:修改注册路由对应的控制器方法
如果你使用的是Laravel默认的Breeze认证脚手架,找到app/Http/Controllers/Auth/RegisteredUserController.php文件,修改create方法:
首先在文件顶部导入Role模型:
use App\Models\Role;
然后修改create方法的返回逻辑:
public function create() { $roles = Role::all(); return view('auth.register', compact('roles')); }
步骤2:在Blade中渲染下拉菜单
直接在register.blade.php的对应位置插入方式一中的下拉菜单代码即可,不需要再在Blade里查询数据。
现有代码适配说明
你提供的CreateNewUser.php代码已经包含了role_id的必填校验,且用户创建逻辑也已经写入了role_id字段,不需要额外修改。
内容的提问来源于stack exchange,提问作者Mahnaz Rafia Islam
相关产品推荐
相关产品推荐

