Laravel 5.1身份验证注册无法获取数据

时间:2015-12-22 09:58:41

标签: php laravel authentication laravel-5.1

我一直在寻找这个,但我找不到答案。 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'];
}

1 个答案:

答案 0 :(得分:0)

所以...有趣的故事。它在MySQL工作台中显示了一行,所以我会右键单击该行,点击删除,它会将表显示为空。原来MySQL Workbench实际上没有删除记录。我用查询手动删除了记录并再次注册并且它有效。谢谢你的帮助。