我一直在寻找这个,但我找不到答案。 Laravel文档有点模糊。
我正在尝试注册用户,并且大多数情况下它正在使用Laravel的内置身份验证工具。我想要做的就是,当用户注册时,我想拥有一个名字字段,而不是只有一个名字字段。我希望有一个first_name和last_name字段。
为了做到这一点,我创建了一个迁移,扩展了defualt laravel迁移创建的users表。这是代码:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddFirstNameLastNameToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::table('users', function($table) {
$table->dropColumn('name');
$table->string('first_name')->after('id');
$table->string('last_name')->after('first_name');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::table('users', function($table) {
$table->dropColumn('last_name');
$table->dropColumn('first_name');
$table->string('name');
});
}
}
之后,我创建了注册表单的视图。这是代码:
@extends('../master')
@section('content')
<div class="container">
<div class="row">
{!! Form::open(['url' => url('auth/register'), 'method' => 'post']) !!}
<div class="form-group">
{!! Form::label('email', 'Email') !!}
{!! Form::email('email', null, ['class'=>'form-control', 'id'=>'username']) !!}
</div>
<div class="form-group">
{!! Form::label('first_name', 'First Name') !!}
{!! Form::text('first_name', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('last_name', 'Last Name') !!}
{!! Form::text('last_name', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Password') !!}
{!! Form::password('password', ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password_confirmation', 'Password Confirmation') !!}
{!! Form::password('password_confirmation', ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Register") !!}
</div>
{!! Form::close() !!}
</div>
</div>
@stop
说auth控制器中的验证功能会验证输入,所以这里是代码:
protected function validator(array $data)
{
return Validator::make($data, [
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
现在所有这些似乎工作正常,问题出在auth控制器的create函数中。 auth方法接收一个数据数组,laravel 5.1 docs不会说这个数组会是什么。我假设它将是注册表单中的表单字段,但我没有获得注册表单中的first_name和last_name字段。它必须正确验证,因为条目已保存在DB中,但first_name和last_name列未保存。我在数据阵列上做了一个dd,但它没有死,所以我不知道数组中有什么以及如何在该数组中获取信息。
旁注,laravel文档也没有说明在注册验证失败时会保存哪些错误,所以我不知道如何显示注册错误。
编辑:
以下是模型,first_name和last_name字段不可填写。然后我根据@Andrew的建议将它们填充,它仍然没有填满字段。
<?php
namespace SellIt;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['first_name', 'last_name', 'email', 'password'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
}
答案 0 :(得分:0)
所以...有趣的故事。它在MySQL工作台中显示了一行,所以我会右键单击该行,点击删除,它会将表显示为空。原来MySQL Workbench实际上没有删除记录。我用查询手动删除了记录并再次注册并且它有效。谢谢你的帮助。