Laravel:即使用户名已填满,注册器仍在为用户名提交空值

问题描述

注册新用户时,我希望他们选择唯一的用户名。当我使用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','max:16'],'email' => [
            'required','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','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();
    });
}

UserFactory

<?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的项目中使用的代码相同。

任何帮助都是美好而感激的!

解决方法

您需要执行$this->faker->unique()->userName,,因为您在userName上缺少大写字母。

同时看到:

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

提取:userName // 'wade55'

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...