# 19. CURD 實踐之為新添加的屬性修改注冊功能
之前為 `user` 表添加了兩個屬性,分別是 `username` 和 `dob`。
現在我們來試一下注冊功能,如下所示:

報錯了!,報錯的內容如下:
```
SQLSTATE[HY000]: General error: 1364 Field 'username' doesn't have a default value
(SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`)
values (1111, hfpp2012111222@gmail.com11, $2y$10$aJOC/aceiBf3bWh5iIGejOkNLKXXYatLo4X.KEftiRslsdyfP5mTW, 2017-09-08 03:56:19, 2017-09-08 03:56:19))
```
大體意思是說,`username` 沒有默認值,就是說我們沒有給 `username` 填充值。
我們分為三步來解決這個問題。
## 1. 加上 view
先給 `username` 和 `dob` 這兩個屬性在前端上加上可以填寫的 view,當用戶注冊的時候就可以填寫用戶名和出生日期。
找到注冊的 view 文件:`resources/views/auth/register.blade.php`。
找準位置,加上下面這兩段代碼:
```
<!-- 用戶名 -->
<div class="form-group{{ $errors->has('username') ? ' has-error' : '' }}">
<label for="username" class="col-md-4 control-label">UserName</label>
<div class="col-md-6">
<input id="username" type="text" class="form-control" name="username" value="{{ old('username') }}" required autofocus>
@if ($errors->has('username'))
<span class="help-block">
<strong>{{ $errors->first('username') }}</strong>
</span>
@endif
</div>
</div>
<!-- 出生日期 -->
<div class="form-group{{ $errors->has('dob') ? ' has-error' : '' }}">
<label for="dob" class="col-md-4 control-label">Dob</label>
<div class="col-md-6">
<input id="dob" type="date" class="form-control" name="dob" value="{{ old('dob') }}" required autofocus>
@if ($errors->has('dob'))
<span class="help-block">
<strong>{{ $errors->first('dob') }}</strong>
</span>
@endif
</div>
</div>
```
## 2. 更改 controller
view 改好了,controller 要接受新的字段,來修改一下。
找到 `app/Http/Controllers/Auth/RegisterController.php` 文件,打開之后,找到 `create` 方法,修改如下:
```
// app/Http/Controllers/Auth/RegisterController.php
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => $data['password'],
// 下面兩行是新增的
'username' => $data['username'],
'dob' => $data['dob'],
]);
}
```
## 3. 修改 model
這樣還不行,需要修改一下 model, 這個有點像 `rails` 的 [Strong Parameters](http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html)的功能。
找到 `app/User.php` 方法,找到 `$fillable` 屬性,修改如下:
```
protected $fillable = [
// 新增了 username 和 dob
'name', 'email', 'password', 'username', 'dob'
];
```
這樣數據表 `users` 就可以存這兩個屬性了。
最后再試下注冊功能,效果如下:

完結。
- 0. 介紹
- 1. php 開發環境安裝
- 2. 跑 laravel 的 hello world
- 3. 第一個路由 UsersController
- 4. 在數據庫中創建一條數據
- 5. 簡單的用戶認證
- 6. 修改 User model
- 7. User model 的 getter 方法
- 8. view 的更多知識
- 9. 在 view 中共享變量
- 10. blade layout
- 11. 使用 @include 來整理 view
- 12. Blade if/else/unless/or
- 13. factories, faker and seeding
- 14. Blade foreach
- 15. 分頁
- 16. 用中間件來限制用戶必須登錄
- 17. Route group
- 18. CURD 實踐之改變用戶表結構
- 19. CURD 實踐之為新添加的屬性修改注冊功能
- 20. CURD 實踐之用 username 來代替 email 登錄
- 21. CURD 個人中心頁面
- VIM 的 laravel 插件
- VIM 中有效地查看 php 源碼