Laravel 的注册页面只提供了 name 和 Email, 有时需要增加自定义字段。例如姓别、地理位置等。Laravel 中可很容易的添加自定义字段。
1. 生成数据迁移 (修改数据库 table)
$ php artisan make:migration add_user_defined_field_to_users_table
修改数据数据迁移文件如下,我们添加了两个自定义字段 pid、role。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddUserDefinedFieldToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('pid', 20)->unique();
$table->string('role');
});
}
public function down()
{
//
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['pid', 'role']);
});
}
}
执行 $php artisan migrate,使数据迁移生效。
2. 在Form中添加字段
修改 resources/auth/register.blade.php 加入以上两个字段。如果想让 role 不可见,且默认值为 customer,html 可以这样写:
<input id="role" type="hidden" class="form-control" name="role" value="customer"
3. 修改 Controller
修改 app/Http/Controllers/Auth/RegisterController.php 的 validator 和 create 方法。
protected function validator(array $data)
{
return Validator::make($data, [
'pid' => 'required|max:20',
'name' => 'required|max:255',
'role' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
protected function create(array $data)
{
return User::create([
'pid' => $data['pid'],
'name' => $data['name'],
'email' => $data['email'],
'role' => $data['role'],
'password' => bcrypt($data['password']),
]);
}
4. 修改 Model
修改 app/User.php
protected $fillable = [
'pid', 'name', 'email', 'password', 'role',
];
打完收工!