2015-12-22 51 views
0

我一直在尋找這個,我找不到答案。 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']; 
} 
+0

你的模型是什麼樣的?我猜這就是問題所在。確保您創建的新字段是可填寫的。您也可以簡單地修改create_users_table遷移,無需創建另一個遷移。 – Andrew

+0

我認爲可填寫的東西會做到這一點,但它沒有:(我將編輯最初的遷移,但是一旦你開始編輯遷移而不是創建新的遷移,你可以開始遇到問題 – Beamer180

+0

我不明白爲什麼你會遇到問題,如果你簡單地修改遷移,沒有什麼不對,事實上,我認爲它比爲已經存在的表創建另一個遷移更好。 – Andrew

回答

0

所以......有趣的故事。它在MySQL工作臺中顯示了一行,所以我會右鍵單擊該行,點擊刪除,它會將該表顯示爲空。結果MySQL Workbench實際上並沒有刪除記錄。我用查詢手動刪除記錄並重新註冊,它工作。謝謝你們的幫助。

+1

在工作臺中,您必須在進行更改後單擊應用 – peanut