新しいユーザーを登録するときに、一意のユーザー名を選択してもらいたいです。Jetstreamを使用したときはすべてユーザー名で機能しましたが、Laravel FortifyとLaravel UIで再構築すると、ユーザーがフィールドに何を入力してもユーザー名はnullになります。以下に、ユーザー名の追加と登録に使用されるコードのサンプルをいくつか示します。
既知の問題をサポートするために、デバッグまたはログでエラーが発生していません。
Register.blade.php (ユーザー名入力)
<div class="px-2">
<x-general.form.label for="username" label="{{ __('Username') }}" class="" />
<x-general.form.input type="text" name="username" class="@error('username') is-invalid @enderror" value="" />
@error('username')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
App\Actions\Fortify\CreateNewUser.php (作成機能)
public function create(array $input)
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'username' => ['required', 'string', 'max:16'],
'email' => [
'required',
'string',
'email',
'max:255',
Rule::unique(User::class),
],
'password' => $this->passwordRules(),
])->validate();
return User::create([
'name' => $input['name'],
'username' => $input['username'],
'email' => $input['email'],
'password' => Hash::make($input['password']),
]);
}
ユーザーモデル
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'username',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
ユーザー テーブルの移行の作成
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('username')->unique();
$table->string('avatar')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
ユーザーファクトリー
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name,
'username' => $this->faker->unique()->userName,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
print_r($this->faker->unique()->userName);
exit;
}
}
ユーザー名が送信されない理由がわかりません。これは、Jetstream ベースのプロジェクトで使用したものとすべて同じコードです。
どんな助けも素晴らしく、感謝しています!