0

新しいユーザーを登録するときに、一意のユーザー名を選択してもらいたいです。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 ベースのプロジェクトで使用したものとすべて同じコードです。

どんな助けも素晴らしく、感謝しています!

4

1 に答える 1

0

You need to do $this->faker->unique()->userName, you are missing capitalization there on userName.

See both:

https://laravel.com/docs/8.x/database-testing#creating-models https://github.com/fzaninotto/Faker#fakerprovideren_usperson

extract: userName // 'wade55'

于 2020-10-20T16:26:25.193 に答える