# 6. 修改 User model
> 2017\.08.09 重新修改,加了動圖,修改代碼
本篇所講的知識的官方文檔在于 [eloquent-mutators](https://laravel.com/docs/5.4/eloquent-mutators)。
上一篇文章 [Ruby 程序員學習 laravel 框架筆記 (5)-簡單的用戶認證](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-5-jian-dan-de-yong-hu-ren-zheng)講到了 laravel 本身集成了登錄和注冊的功能,雖然這個功能已經很不錯了,但有時候還是要根據自己的需求改改。
比如,用戶名,我們要改成首字母大寫的,比如,用戶輸入 `hfpp2012`,存到數據庫的時候,我們要自動變成 `Hfpp2012`。
現在我們來實現一下。
## 1. 修改 controller
首字母大寫還是很簡單的,一個函數即可,就是 `ucfirst`。
我們找到注冊相關的 controller。
找到 `app/Http/Controllers/Auth/RegisterController.php` 文件。
把下面的這一段改一下:
```
// app/Http/Controllers/Auth/RegisterController.php
<?php
...
class RegisterController extends Controller
{
...
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
...
}
?>
```
改成
```
// app/Http/Controllers/Auth/RegisterController.php
<?php
...
class RegisterController extends Controller
{
...
protected function create(array $data)
{
return User::create([
// 注意這一行有變化,加了一個 ucfirst 函數
'name' => ucfirst($data['name']),
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
...
}
?>
```
這樣就可以了,再去注冊一個用戶,應該變成了大寫的首字母。

查看一下數據庫,果然。

## 2. 修改 model
就像 ruby 那樣,這種代碼我們一般不會放在 controller 中的,我們盡量地保持 controller 小,而 model 胖一些。
所以我們**去掉剛才的改動**,找到 User 這個 model,即是 `app/User.php` 這個文件。
我們加入下面的方法:
```
// app/User.php
<?php
...
class User extends Authenticatable
{
use Notifiable;
...
// setNameAttribute 方法是新增的
// 為什么是 setNameAttribute 呢?因為你是 name 屬性,如果你的屬性名叫 password, 可以這里就要變成 setPasswordAttribute。
public function setNameAttribute($value)
{
$this->attributes['name'] = ucfirst($value);
}
}
?>
```
你會發現效果一樣的。
完結。
下一篇:[Ruby 程序員學習 laravel 框架筆記 (7)-User model 的 getter 方法](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-7-user-model-getter-fang-fa)
- 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 源碼