我一直在尋找這個,我找不到答案。 Laravel的文檔有點含糊。Laravel 5.1認證註冊沒有獲取數據
我正在嘗試註冊一個用戶,並且大多數情況下它正在使用Laravel的內置身份驗證工具。我想要做的是,當用戶註冊時,而不是隻有一個名稱字段,我想有一個first_name和last_name字段。
爲了做到這一點,我創建了一個遷移,擴展了defualt laravel遷移創建的用戶表。下面是該代碼:
<?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
它說,在身份驗證控制器的驗證功能將驗證輸入,所以這裏是該代碼:
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控制器中。 auth方法接收一組數據,laravel 5.1 docs不會說出這個數組中將會發生什麼。我認爲這將是註冊表單中的表單字段,但我沒有得到處於註冊表操作形式的first_name和last_name字段。它必須正確驗證,因爲條目正在保存在數據庫中,但first_name和last_name列未保存。我在數據數組上做了一個dd,但它不會死,所以我不知道數組中的內容以及如何獲取該數組中的信息。
注意,laravel文檔也不會說註冊驗證失敗時將保存錯誤的位置,所以我不知道如何顯示註冊錯誤。
編輯:
下面是模式,FIRST_NAME和LAST_NAME領域沒有可填寫。然後,我根據@安德魯的建議讓它們可以填寫,但它仍然沒有填滿這些字段。
<?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'];
}
你的模型是什麼樣的?我猜這就是問題所在。確保您創建的新字段是可填寫的。您也可以簡單地修改create_users_table遷移,無需創建另一個遷移。 – Andrew
我認爲可填寫的東西會做到這一點,但它沒有:(我將編輯最初的遷移,但是一旦你開始編輯遷移而不是創建新的遷移,你可以開始遇到問題 – Beamer180
我不明白爲什麼你會遇到問題,如果你簡單地修改遷移,沒有什麼不對,事實上,我認爲它比爲已經存在的表創建另一個遷移更好。 – Andrew