将列添加到laravel用户模型并保持auth寄存器行为

时间:2017-07-09 02:55:23

标签: php laravel laravel-5.4

众所周知,Laravel会在您创建项目时自动创建用户模型。然后我创建了一个auth接口php artisan make:auth。自动生成的寄存器方法正常工作。然后,我为用户表的迁移添加了一个非空列。现在它已经不再适用了。当laravel创建这个auth脚手架时,我不知道插入的确切位置。我尝试在create中修改RegisterController方法,但它没有用。

class RegisterController extends Controller
{

protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'tipo' => $data['tipo'], // name of the new column I added
            'password' => bcrypt($data['password']),
        ]);
    }
}

在注册<form>上,我添加了输入字段tipo。生成的代码包括:

<form class="form-horizontal" method="POST" action="{{ route('register') }}">

<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus>

<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required>

<select id="tipo" class="form-control" name="tipo" value="{{ old('tipo') }}" required>
                                <option value="1">Gerente</option>
                                <option value="2">Caixa</option>
                                <option value="3">Garçom</option>
</select>

<input id="password" type="password" class="form-control" name="password" required>

<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>

<button type="submit" class="btn btn-primary">
                                Registrar
</button>

在User类模型中,我将新列添加到fillable:

/protected $fillable = [
    'name', 'email', 'password', 'tipo',
];

在路线上,仅限web.php Auth::routes();。如果我运行php artisan route:list,它会告诉我,对于POST方法,uri register会导致RegisterController@register,但在RegisterController上,它只有我发布的创建方法和验证方法。那么,注册实际发生在哪里?在laravel方面,它运行$user->save()方法?

修改:我要做的就是修改它,使其包含新列的新<input>

编辑2:我发现实际上代码没有达到create方法,因为我在返回之前添加了dd($data)并且仍然是相同的行为,然后我添加了一些强制语法错误也发生了同样的事情。

1 个答案:

答案 0 :(得分:1)

首先,将最近添加的列添加到app \ User.php文件中的$ fillable数组中。

<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */protected $fillable = [
        'name', 'email', 'password', 'tipo'
    ];