Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do I modify the registration form fields in Laravel Fortify


How do I modify the registration form fields in Laravel Fortify


To modify the registration form fields in Laravel Fortify, you can follow these steps:

1. Create a custom `RegisterRequest` class:
- Create a new file called `RegisterRequest.php` in your `app/Actions/Fortify` directory.
- Implement the `Laravel\Fortify\Contracts\RegisterRequest` interface and override the `rules` method.
- In the `rules` method, you can define your custom validation rules for the registration form fields.

php
<?php

namespace App\Actions\Fortify;

use Illuminate\Validation\Rules;
use Laravel\Fortify\Contracts\RegisterRequest as RegisterRequestContract;

class RegisterRequest implements RegisterRequestContract
{
    /**
     * Determine the validation rules for the registration request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
            'custom_field' => ['required', 'string', 'max:100'], // Add your custom field
        ];
    }
}

2. Register the custom `RegisterRequest` class:
- Open your `app/Providers/FortifyServiceProvider.php` file.
- In the `boot` method, bind the `RegisterRequestContract` to your custom `RegisterRequest` class.

php
<?php

namespace App\Providers;

use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\RegisterRequest;
use Illuminate\Support\ServiceProvider;
use Laravel\Fortify\Contracts\RegisterRequest as RegisterRequestContract;
use Laravel\Fortify\Fortify;

class FortifyServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Fortify::createUsersUsing(CreateNewUser::class);
        Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
        Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
        Fortify::resetUserPasswordsUsing(ResetUserPassword::class);

        Fortify::registerView(function () {
            return view('auth.register');
        });

        $this->app->bind(RegisterRequestContract::class, RegisterRequest::class);
    }
}

3. Update the `CreateNewUser` class:
- In your `CreateNewUser` class, you can access the custom fields from the `RegisterRequest` class and use them to create the new user.

php
<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Fortify\Contracts\RegisterRequest;

class CreateNewUser implements CreatesNewUsers
{
    /**
     * Validate and create a newly registered user.
     *
     * @param  \Laravel\Fortify\Contracts\RegisterRequest  $request
     * @return \App\Models\User
     */
    public function create(RegisterRequest $request)
    {
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'custom_field' => $request->custom_field, // Use the custom field
        ]);

        return $user;
    }
}

With these changes, you can now add custom fields to the registration form and handle them in the `CreateNewUser` class. The validation rules for the custom fields are defined in the `RegisterRequest` class.

Remember to update your registration view to include the new form fields, and ensure that the form submission matches the expected request structure.

Citations:
[1] https://wpwebinfotech.com/blog/laravel-fortify/
[2] https://laravel.com/docs/11.x/fortify
[3] https://stackoverflow.com/questions/66529255/customize-laravel-fortify-registration-error
[4] https://github.com/laravel/fortify/issues/77
[5] https://github.com/laravel/fortify/blob/1.x/src/Http/Controllers/RegisteredUserController.php