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

Laravel 6实现个人与企业两类用户双注册表单方案咨询

实现Laravel 6双类型用户注册(个人/企业)

我来帮你搞定这个双注册表单的需求,思路其实很清晰,咱们一步步来实现:

1. 扩展用户表结构

首先得给用户表加上区分用户类型的字段,以及企业用户专属的字段。先生成一个迁移文件:

php artisan make:migration add_user_type_fields_to_users_table

打开生成的迁移文件,修改up()方法:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->enum('user_type', ['personal', 'business'])->default('personal');
        $table->string('company_name')->nullable();
        $table->string('first_name')->nullable();
        $table->string('last_name')->nullable();
    });
}

执行迁移生效:

php artisan migrate

2. 更新User模型

打开app/User.php,把新增的字段加入$fillable白名单,这样才能通过批量赋值创建用户:

protected $fillable = [
    'first_name', 'last_name', 'company_name', 'email', 'password', 'user_type',
];

还可以加两个辅助方法,方便后续快速判断用户类型:

public function isPersonal()
{
    return $this->user_type === 'personal';
}

public function isBusiness()
{
    return $this->user_type === 'business';
}

3. 添加独立注册路由

打开routes/web.php,在默认Auth路由(如果还没生成Auth,先执行composer require laravel/ui:^1.0和php artisan ui vue --auth)下面添加两个独立的注册路由:

// 个人用户注册页面
Route::get('/register/personal', 'Auth\RegisterController@showPersonalRegistrationForm')->name('register.personal');
// 个人用户注册提交
Route::post('/register/personal', 'Auth\RegisterController@registerPersonal');

// 企业用户注册页面
Route::get('/register/business', 'Auth\RegisterController@showBusinessRegistrationForm')->name('register.business');
// 企业用户注册提交
Route::post('/register/business', 'Auth\RegisterController@registerBusiness');

4. 创建两个注册视图

在resources/views/auth/register目录下新建两个视图文件:

个人用户注册视图(personal.blade.php)

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('个人用户注册') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register.personal') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="first_name" class="col-md-4 col-form-label text-md-right">{{ __('名') }}</label>
                            <div class="col-md-6">
                                <input id="first_name" type="text" class="form-control @error('first_name') is-invalid @enderror" name="first_name" value="{{ old('first_name') }}" required autocomplete="first_name" autofocus>
                                @error('first_name')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="last_name" class="col-md-4 col-form-label text-md-right">{{ __('姓') }}</label>
                            <div class="col-md-6">
                                <input id="last_name" type="text" class="form-control @error('last_name') is-invalid @enderror" name="last_name" value="{{ old('last_name') }}" required autocomplete="last_name">
                                @error('last_name')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('邮箱') }}</label>
                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
                                @error('email')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('密码') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
                                @error('password')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('确认密码') }}</label>
                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">{{ __('注册') }}</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

企业用户注册视图(business.blade.php)

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('企业用户注册') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register.business') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="company_name" class="col-md-4 col-form-label text-md-right">{{ __('企业名称') }}</label>
                            <div class="col-md-6">
                                <input id="company_name" type="text" class="form-control @error('company_name') is-invalid @enderror" name="company_name" value="{{ old('company_name') }}" required autocomplete="company_name" autofocus>
                                @error('company_name')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('邮箱') }}</label>
                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
                                @error('email')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('密码') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
                                @error('password')
                                    <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('确认密码') }}</label>
                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">{{ __('注册') }}</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

5. 更新Register控制器

打开app/Http/Controllers/Auth/RegisterController.php,添加以下方法:
先导入必要的类:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

然后添加显示表单的方法:

public function showPersonalRegistrationForm()
{
    return view('auth.register.personal');
}

public function showBusinessRegistrationForm()
{
    return view('auth.register.business');
}

最后添加处理注册提交的方法:

public function registerPersonal(Request $request)
{
    // 验证个人用户字段
    $request->validate([
        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:8|confirmed',
    ]);

    // 创建个人用户
    $user = \App\User::create([
        'first_name' => $request->first_name,
        'last_name' => $request->last_name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'user_type' => 'personal',
    ]);

    // 自动登录用户
    auth()->login($user);

    // 跳转到首页(可自定义跳转地址)
    return redirect()->route('home');
}

public function registerBusiness(Request $request)
{
    // 验证企业用户字段
    $request->validate([
        'company_name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:8|confirmed',
    ]);

    // 创建企业用户
    $user = \App\User::create([
        'company_name' => $request->company_name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'user_type' => 'business',
    ]);

    // 自动登录用户
    auth()->login($user);

    // 跳转到首页(可自定义跳转地址)
    return redirect()->route('home');
}

6. 可选:添加注册入口链接

在登录页面或者导航栏加上两个注册选项的入口,比如在resources/views/auth/login.blade.php的登录按钮下方添加:

<div class="mt-2">
    <a href="{{ route('register.personal') }}">个人用户注册</a> | <a href="{{ route('register.business') }}">企业用户注册</a>
</div>

这样就完成了两个独立的注册表单,分别处理个人和企业用户的注册需求,测试一下就能看到效果啦。

内容的提问来源于stack exchange,提问作者ItsCharlie4real

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:57:38