# 第7节 Laravel-通过表单实现修改 #
7.1 给HTML添加链接
7.2 创建修改的表单页面
7.3 使用模型实现修改操作
## 7.1 给HTML添加链接 ##
在 `\resources\views\student\index.blade.php` 中给修改添加 href 属性。
<a href="{{ url('student/update') }}">修改</a>
添加页面和修改其实很像,我们可以复制 `resources\views\student\create.blade.php`,并命名为 `resources\views\student\update.blade.php`
将“新增学生”修改为“修改学生”。
## 7.2 创建修改的表单页面 ##
创建控制器的update方法。
~~~
/**
* 用于修改学生信息
*
* @param
* @return bool
* @author webjust [604854119@qq.com]
*/
public function update()
{
return view('student/update');
}
~~~
新增加了一条路由:
Route::get('/', ['uses' => 'StudentController@index']);
// 新增表单路由
Route::any('student/create', ['uses' => 'StudentController@create']);
Route::any('student/update', ['uses' => 'StudentController@update']);
此时,刷新首页,点击修改,应该可以打开修改的表单页面了吧!
但是,我们要修改,首先需要传递一个被修改的用户的 主键id 作为参数吧!
**定义一个但参数的路由**
Route::any('student/update/{id}', ['uses' => 'StudentController@update']);
此时,我们在修改url()方法,传递第2个参数,使用数组的方式,传递id的值:
<a href="{{ url('student/update', ['id' => $student->id]) }}">修改</a>
在控制器中的update()修改方法中,要接收 id 值;提交时要获取表单的数据吧!所以加入Request依赖组件把!
这个组件很机制的就可以获取传递过来的id值。
如下:
public function update(Request $request, $id)
{
$student = Student::find($id);
var_dump($student);
return view('student/update');
}
我们使用传递过来的id主键,作为参数,使用模型的 find($id) 方法,即可查询数据表中对应的那条数据了!现在我们使用 var_dump 打印,查看结果!
![](https://box.kancloud.cn/65008a60c22a7a8530639610b14911c9_1046x728.png)
修改学生的信息,把查询出来的数据 `$student_info`,传递给视图。
public function update(Request $request, $id)
{
$student_info = Student::find($id);
return view('student/update', ['student_info' => $student_info]);
}
此时,我们继续做一些操作,把数据填充到视图中。
~~~
<form class="form-horizontal" method="post" action="">
{{ csrf_field() }}
<div class="form-group">
<label for="name" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-5">
<input type="text" value="{{ old('Student')['name'] ? old('Student')['name'] : $student_info->name }}" name="Student[name]" class="form-control" id="name" placeholder="请输入学生姓名">
</div>
<div class="col-sm-5">
<p class="form-control-static text-danger">{{ $errors->first('Student.name') }}</p>
</div>
</div>
<div class="form-group">
<label for="age" class="col-sm-2 control-label">年龄</label>
<div class="col-sm-5">
<input type="text" value="{{ old('Student')['age'] ? old('Student')['age'] : $student_info->age }}" name="Student[age]" class="form-control" id="age" placeholder="请输入学生年龄">
</div>
<div class="col-sm-5">
<p class="form-control-static text-danger">{{ $errors->first('Student.age') }}</p>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">性别</label>
<div class="col-sm-5">
@foreach($student->sex() as $ind => $sex)
<label class="radio-inline">
<input type="radio"
name="Student[sex]" {{ ((isset(old('Student')['sex']) && old('Student')['sex'] == $ind) || $student_info->sex == $ind) ? 'checked' : '' }}
value="{{ $ind }}"> {{ $sex }}
</label>
@endforeach
</div>
<div class="col-sm-5">
<p class="form-control-static text-danger">{{ $errors->first('Student.sex') }}</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</div>
</form>
~~~
我们采用的是POST提交,提交到当前页 update() 方法中,所以action的值留空。
## 7.3 使用模型实现修改操作 ##
update() 的方法,和增加的方法差不多,所以可以使用增加的验证方式。
public function update(Request $request, $id)
{
$student_info = Student::find($id);
// 修改操作
if($request->isMethod('POST'))
{
// 校验
$this->validate($request, [
'Student.name' => 'required|min:2|max:20',
'Student.age' => 'required|integer',
'Student.sex' => 'required|integer',
],[
'required' => ':attribute 为必填项',
'min' => ':attribute 长度不能小于2个字符',
'max' => ':attribute 长度不能大于20个字符',
'integer' => ':attribute 必须为数字',
],[
'Student.name' => '用户名',
'Student.age' => '年龄',
'Student.sex' => '性别',
]);
$data = $request->input('Student');
$student_info->name = $data['name'];
$student_info->age = $data['age'];
$student_info->sex = $data['sex'];
$student_info->updated_time = time();
// 模型的修改方法
$ret = $student_info->save();
if($ret)
{
return redirect('/')->with('success', '修改成功!')->withInput();
} else{
return redirect('student/create')->with('error', '修改失败!')->withInput();
}
}
return view('student/update', ['student_info' => $student_info]);
}
到此,我们的修改功能已经成功了。
![](https://box.kancloud.cn/b8caf8714964adc01bdc82393f441b9e_1030x635.png)
如图,左边的hover效果,我们可以继续优化!
把 `\resources\views\shared\siderbar.blade.php` 文件修改下:
<div class="col-md-3">
<div class="list-group">
<a href="{{ url('/') }}"
class="list-group-item {{ Request::path() != 'student/create' ? 'active' : '' }}">学生列表</a>
<a href="{{ url('student/create') }}"
class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a>
</div>
</div>
主要就是把条件修改了 ` Request::path() != '/' ? 'active' : ''` 修改为 ` Request::path() != 'student/create' ? 'active' : ''`