I have watched several videos and read some related tutorials about customization of the register form of Laravel/JetStream registration system. All I found is something like this:
//resources/views/auth/register.blade.php
<div class="mt-4">
<x-label for="gender" value="{{ __('Gender') }}" />
<x-dropdown id="gender" class="block mt-1 w-full" name="gender" :value="old('gender')" required>
<x-slot name="content">
<option value="0">Select Gender</option>
<option value="1">Female</option>
<option value="2">Male</option>
</x-slot>
</x-dropdown>
</div>
However I want to populate the genders dropdown from a database table, say "genders".
For this I have created a model Genders.
All I need to do is adding the following line
//this line will be in a file but which one?
$genders = Genders::all();
Then I will be able to list the items in the view, as follows:
<div class="mt-4">
<x-label for="gender" value="{{ __('Gender') }}" />
<x-dropdown id="gender" class="block mt-1 w-full" name="gender" :value="old('gender')" required>
<x-slot name="content">
<option value="0">Select Gender</option>
@foreach ($genders as $gender)
<option value="{{$gender->id}}">{{$gender->name}}</option>
@endforeach
</x-slot>
</x-dropdown>
</div>
I have added the following code into app/Providers/FortifyServiceProvider.php
<?php
namespace App\Providers;
use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Laravel\Fortify\Fortify;
use App\Models\Gender;
class FortifyServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//I have added this but no change ):
Fortify::registerView(function () {
$genders = Gender::all();
return view('auth.register', ['genders' => $genders]);
});
}
I could not find where should I put the code $genders = Genders::all();
and pass $genders
to view register.blade.php
? This could simple for a few options but what if I want to list countries for example?
I never knew it was so easy:
I have added
//
Fortify::registerView(function () {
$genders = Gender::all();
return view('auth.register', ['genders' => $genders]);
});
into boot()
function in app/Providers/AuthServiceProvider.php
<?php
namespace App\Providers;
// use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Fortify\Fortify;
use App\Models\Gender;
class AuthServiceProvider extends ServiceProvider
{
/**
* The model to policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
//
];
/**
* Register any authentication / authorization services.
*/
public function boot(): void
{
//
Fortify::registerView(function () {
$genders = Gender::all();
return view('auth.register', ['genders' => $genders]);
});
}
}
Now I can see a dynamically populated dropdown list.