我正在尝试将字段添加到Laravel 5创建的users
表中。我已修改了迁移以添加该字段:
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->string('my_new_field'); // Added this field
$table->rememberToken();
$table->timestamps();
});
}
...
}
我使用的是Laravel提供的默认身份验证系统。每当新用户注册时,我都需要将my_new_field
设置为某个值。我是如何(以及在哪里)做的?
AuthController
处理身份验证过程。它使用trait AuthenticatesAndRegistersUsers
postRegister()
函数处理注册请求。但实际插入的值在哪里?
答案 0 :(得分:6)
create()
中的App\Services\Registrar
方法负责创建新的User
实例。我在这个函数中添加了字段:
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'my_new_field' => 'Init Value'
]);
}
修改新用户注册时所需的表单字段 使用您的应用程序,您可以修改
App\Services\Registrar
类。该类负责验证和创建新用户 你的申请。注册商的
validator
方法包含验证规则 对于应用程序的新用户,而create
方法 注册商负责在您的用户中创建新的用户记录 数据库。您可以根据需要随意修改这些方法。AuthController
通过方法调用注册器 包含在AuthenticatesAndRegistersUsers
特征中。
更新2016年2月3日 Laravel 5.2 app / Services / Registrar.php文件中的设置已移至app / Http / Controllers / Auth / AuthController.php
我还必须在User
模型中填写此字段:
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
...
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password', 'my_new_field'];
...
}
答案 1 :(得分:0)
只需在字段中添加默认值:
class CreateUsersTable extends Migration {
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->string('my_new_field')->default('init_value'); // Added this field
$table->rememberToken();
$table->timestamps();
});
}
...
}
Alternativeley,只需使用新的迁移来添加列,以防已经执行了创建迁移:
class AddMyNewFieldToUsersTable extends Migration {
public function up()
{
Schema::table('users', function($table) {
$table->string('my_new_field')->default('init_value'); // Added
});
}
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('my_new_field');
});
}
}
如果您不想使用db defaults,您还可以在store
方法中在控制器中设置此值:
public class UsersController extends BaseController {
// ...
public function store(Request $request) {
$user = new User;
$user->fill($request->all());
$user->my_new_field = 'init_value';
$user->save();
// return whatever
}
}
修改强> 鉴于您在评论中提供的信息是一点指导:
在AuthController
(/app/Http/Controllers/Auth/AuthController.php)中添加以下方法(这将覆盖AuthenticatesAndRegistersUsers-trait的默认值,可以找到here)
public function postRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$user = $this->create($request->all()); // here the values are inserted
$user->my_new_field = 'init_value'; // here would be the place to add your custom default
$user->save(); // maybe try to do all that in a single transaction...
Auth::login($user);
return redirect($this->redirectPath());
}
我不太确定这是否可以开箱即用,但它应该让你开始。
答案 2 :(得分:0)
打开位于(对于Laravel 5.2 AuthController)
的特征/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php
在这里,您可以轻松找到负责登录和注册用户的有趣方法。
这些是
getRegister() // responsible for showing registration form
postRegister() // responsible for processing registration request
getLogin() // responsible for showing login form
postLogin() // responsible for authentication user
每次调用这些方法时,您将访问特定路由(auth / register或auth / login),即用户注册和&用户登录
希望这会清除一些概念!!