2017.08.09 重新修改,加了动图,修改代码
本篇所讲的知识的官方文档在于 eloquent-mutators。
上一篇文章 Ruby 程序员学习 laravel 框架笔记 (5)-简单的用户认证讲到了 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);
}
}
?>
你会发现效果一样的。
完结。