多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 19. CURD 实践之为新添加的属性修改注册功能 之前为 `user` 表添加了两个属性,分别是 `username` 和 `dob`。 现在我们来试一下注册功能,如下所示: ![](https://box.kancloud.cn/1ee825730639211a1a246a0a838b5e70_2616x1144.gif) 报错了!,报错的内容如下: ``` 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` 就可以存这两个属性了。 最后再试下注册功能,效果如下: ![](https://box.kancloud.cn/06bdc8b0eee480950e7fa82f16655b4b_2602x1296.gif) 完结。